KVM: selftests: Add all (known) EFLAGS bit definitions

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>
This commit is contained in:
Sean Christopherson 2026-05-15 15:26:36 -07:00
parent a1e7aeb1be
commit 35c08038cb
3 changed files with 20 additions and 3 deletions

View 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)

View 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);

View 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));