On Tue, May 20, 2025 at 01:30:11PM +0200, Magnus Kulke wrote:
> Write CPU register state to MSHV vCPUs. Various mapping functions to
> prepare the payload for the HV call have been implemented.
>
> Signed-off-by: Magnus Kulke <[email protected]>
> ---
[...]
> +
> +static void populate_hv_table_reg(const struct SegmentCache *seg,
> + hv_x64_table_register *hv_reg)
> +{
> + hv_reg->base = seg->base;
> + hv_reg->limit = seg->limit;
> + memset(hv_reg->pad, 0, sizeof(hv_reg->pad));
I'm not sure if the compiler will optimize this function call out.
It is straightforward to write
*hv_reg = { .base = seg->base, .limit = seg->limit };
> +}
> +
> +static int set_special_regs(const CPUState *cpu)
> +{
> + X86CPU *x86cpu = X86_CPU(cpu);
> + CPUX86State *env = &x86cpu->env;
> + int cpu_fd = mshv_vcpufd(cpu);
> + struct hv_register_assoc *assocs;
> + size_t n_regs = sizeof(SPECIAL_REGISTER_NAMES) /
> sizeof(hv_register_name);
> + int ret;
> +
> + assocs = g_new0(struct hv_register_assoc, n_regs);
The allocation here can be removed, since we know for sure how many
elements are in `SPECIAL_REGISTER_NAMES`. It should be fine to use an
on-stack array.
There are probably other places you can optimize.
Thanks,
Wei.