From: Mohamed Mediouni Date: Tue, 24 Mar 2026 15:13:18 +0000 (+0100) Subject: whpx: i386: add implementation of new x86_emul_ops X-Git-Tag: v11.0.0-rc2~16^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e2a11aea4e6e4046f1686acaa07c16ef903989c9;p=thirdparty%2Fqemu.git whpx: i386: add implementation of new x86_emul_ops target/i386/emulate now has new ops for fetching whether the guest is in protected mode, long mode or user mode without fetching control registers. Use those for faster vmexits. Signed-off-by: Mohamed Mediouni Link: https://lore.kernel.org/r/20260324151323.74473-8-mohamed@unpredictable.fr Signed-off-by: Paolo Bonzini --- diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 69d141e7cce..b97dc9fd514 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -885,10 +885,32 @@ static void read_segment_descriptor(CPUState *cpu, } } +static bool is_protected_mode(CPUState *cpu) +{ + AccelCPUState *vcpu = cpu->accel; + + return vcpu->exit_ctx.VpContext.ExecutionState.Cr0Pe == 1; +} + +static bool is_long_mode(CPUState *cpu) +{ + AccelCPUState *vcpu = cpu->accel; + + return vcpu->exit_ctx.VpContext.ExecutionState.EferLma == 1; +} + +static bool is_user_mode(CPUState *cpu) +{ + AccelCPUState *vcpu = cpu->accel; + return vcpu->exit_ctx.VpContext.ExecutionState.Cpl == 3; +} static const struct x86_emul_ops whpx_x86_emul_ops = { .read_segment_descriptor = read_segment_descriptor, - .handle_io = handle_io + .handle_io = handle_io, + .is_protected_mode = is_protected_mode, + .is_long_mode = is_long_mode, + .is_user_mode = is_user_mode }; static void whpx_init_emu(void)