On Tue, Apr 28, 2026 at 04:50:53PM +0300, Doru Blânzeanu wrote: > Update mshv_store_regs to use the register page when it is mmapped and > valid to set registers. > Otherwise use the ioctls to set the registers. > > Signed-off-by: Doru Blânzeanu <[email protected]> > --- > target/i386/mshv/mshv-cpu.c | 45 +++++++++++++++++++++++++++++++++---- > 1 file changed, 41 insertions(+), 4 deletions(-) > > diff --git a/target/i386/mshv/mshv-cpu.c b/target/i386/mshv/mshv-cpu.c > index 7949493e97..6bb3e6d4a9 100644 > --- a/target/i386/mshv/mshv-cpu.c > +++ b/target/i386/mshv/mshv-cpu.c > @@ -294,14 +294,51 @@ static int set_standard_regs(const CPUState *cpu) > return 0; > } > > +static void mshv_set_standard_regs_vp_page(CPUState *cpu) > +{ > + X86CPU *x86cpu = X86_CPU(cpu); > + CPUX86State *env = &x86cpu->env; > + > + env->regs_page->rax = env->regs[R_EAX]; > + env->regs_page->rbx = env->regs[R_EBX]; > + env->regs_page->rcx = env->regs[R_ECX]; > + env->regs_page->rdx = env->regs[R_EDX]; > + env->regs_page->rsi = env->regs[R_ESI]; > + env->regs_page->rdi = env->regs[R_EDI]; > + env->regs_page->rsp = env->regs[R_ESP]; > + env->regs_page->rbp = env->regs[R_EBP]; > + env->regs_page->r8 = env->regs[R_R8]; > + env->regs_page->r9 = env->regs[R_R9]; > + env->regs_page->r10 = env->regs[R_R10]; > + env->regs_page->r11 = env->regs[R_R11]; > + env->regs_page->r12 = env->regs[R_R12]; > + env->regs_page->r13 = env->regs[R_R13]; > + env->regs_page->r14 = env->regs[R_R14]; > + env->regs_page->r15 = env->regs[R_R15]; > + env->regs_page->rip = env->eip; > + lflags_to_rflags(env); > + env->regs_page->rflags = env->eflags; > + > + env->regs_page->dirty |= (1u << HV_X64_REGISTER_CLASS_GENERAL) > + | (1u << HV_X64_REGISTER_CLASS_IP) > + | (1u << HV_X64_REGISTER_CLASS_FLAGS); > +} > + > int mshv_store_regs(CPUState *cpu) > { > + X86CPU *x86cpu = X86_CPU(cpu); > + CPUX86State *env = &x86cpu->env; > int ret; > > - ret = set_standard_regs(cpu); > - if (ret < 0) { > - error_report("Failed to store standard registers"); > - return -1; > + /* Use register vp page to optimize registers access */ > + if (env->regs_page && env->regs_page->isvalid != 0) { > + mshv_set_standard_regs_vp_page(cpu); > + } else { > + ret = set_standard_regs(cpu); > + if (ret < 0) { > + error_report("Failed to store standard registers"); > + return -1; > + } > }
I think for consistency sake it would be better to also write back sregs, but this is reworked in the migration patch series anyway, so we can leave it as is here. > > return 0; > -- > 2.53.0 Reviewed-By: Magnus Kulke <[email protected]>
