]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: selftests: Add all (known) EFLAGS bit definitions
authorSean Christopherson <seanjc@google.com>
Fri, 15 May 2026 22:26:36 +0000 (15:26 -0700)
committerSean Christopherson <seanjc@google.com>
Thu, 21 May 2026 21:40:24 +0000 (14:40 -0700)
Add #defines for all known EFLAGS bit, e.g. so that tests can use things
like EFLAGS.TF to validate single-stepping behavior.  Opportunistically
use X86_EFLAGS_FIXED instead of an open-coded equivalent when stuffing
initial vCPU state.

No functional change intended.

Link: https://patch.msgid.link/20260515222638.1949982-9-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/include/x86/processor.h
tools/testing/selftests/kvm/lib/x86/processor.c
tools/testing/selftests/kvm/lib/x86/vmx.c

index 77f576ee7789d899aa52fb06d7c3e215ed690035..851ffcd3340ca730b1d090e20774088372ef3d36 100644 (file)
@@ -38,7 +38,24 @@ extern u64 guest_tsc_khz;
 
 const char *ex_str(int vector);
 
-#define X86_EFLAGS_FIXED        (1u << 1)
+#define X86_EFLAGS_CF          BIT(0)  /* Carry Flag */
+#define X86_EFLAGS_FIXED       BIT(1)  /* Bit 1 - always on */
+#define X86_EFLAGS_PF          BIT(2)  /* Parity Flag */
+#define X86_EFLAGS_AF          BIT(4)  /* Auxiliary carry Flag */
+#define X86_EFLAGS_ZF          BIT(6)  /* Zero Flag */
+#define X86_EFLAGS_SF          BIT(7)  /* Sign Flag */
+#define X86_EFLAGS_TF          BIT(8)  /* Trap Flag */
+#define X86_EFLAGS_IF          BIT(9)  /* Interrupt Flag */
+#define X86_EFLAGS_DF          BIT(10) /* Direction Flag */
+#define X86_EFLAGS_OF          BIT(11) /* Overflow Flag */
+#define X86_EFLAGS_IOPL                BIT(12) /* I/O Privilege Level (2 bits) */
+#define X86_EFLAGS_NT          BIT(14) /* Nested Task */
+#define X86_EFLAGS_RF          BIT(16) /* Resume Flag */
+#define X86_EFLAGS_VM          BIT(17) /* Virtual Mode */
+#define X86_EFLAGS_AC          BIT(18) /* Alignment Check/Access Control */
+#define X86_EFLAGS_VIF         BIT(19) /* Virtual Interrupt Flag */
+#define X86_EFLAGS_VIP         BIT(20) /* Virtual Interrupt Pending */
+#define X86_EFLAGS_ID          BIT(21) /* CPUID detection */
 
 #define X86_CR4_VME            (1ul << 0)
 #define X86_CR4_PVI            (1ul << 1)
index b51467d70f6e7d4800c22266a576c9560bd9e264..4ca48de7a926dfdd323a651576288fca5e91959b 100644 (file)
@@ -848,7 +848,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, u32 vcpu_id)
 
        /* Setup guest general purpose registers */
        vcpu_regs_get(vcpu, &regs);
-       regs.rflags = regs.rflags | 0x2;
+       regs.rflags = regs.rflags | X86_EFLAGS_FIXED;
        regs.rsp = stack_gva;
        vcpu_regs_set(vcpu, &regs);
 
index 67642759e4a05f1faae9f6dcc9cc89c1d9417c6a..7c10ba6e6fb400ef10de374f99367f810f51654f 100644 (file)
@@ -360,7 +360,7 @@ static inline void init_vmcs_guest_state(void *rip, void *rsp)
        vmwrite(GUEST_DR7, 0x400);
        vmwrite(GUEST_RSP, (u64)rsp);
        vmwrite(GUEST_RIP, (u64)rip);
-       vmwrite(GUEST_RFLAGS, 2);
+       vmwrite(GUEST_RFLAGS, X86_EFLAGS_FIXED);
        vmwrite(GUEST_PENDING_DBG_EXCEPTIONS, 0);
        vmwrite(GUEST_SYSENTER_ESP, vmreadz(HOST_IA32_SYSENTER_ESP));
        vmwrite(GUEST_SYSENTER_EIP, vmreadz(HOST_IA32_SYSENTER_EIP));