diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2026-10-16 11:02:29 +0200 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2026-10-16 11:02:29 +0200 |
| commit | c7c2f51339751e676c415afabe5bca9ff2c19f38 (patch) | |
| tree | b4366f5d36b775ad1d8d2df26555de6b5b1c9a6d /arch/x86/include | |
| parent | e43190558b8fbbde8db1e5d41ac529749623c441 (diff) | |
| parent | 883719f57f5d3898637b130d6db4742471cad618 (diff) | |
| download | linux-c7c2f51339751e676c415afabe5bca9ff2c19f38.tar.gz linux-c7c2f51339751e676c415afabe5bca9ff2c19f38.zip | |
Merge tag 'kvm-x86-vmx-7.4' of https://github.com/kvm-x86/linux into HEAD
KVM VMX changes for 7.4
- Enable Notify VM-Exits (now called Instruction Timeout in the SDM) and Bus
Lock VM-Exits for TDX guests when they're enabled by userspace (KVM forgot
to wire up the TDX Module knobs).
- Move all common (between VMX and TDX) APIs/helpers to common.h/main.c, and
change all namespace prefixes from "vmx" to "vt".
- Fix a thankfully benign bug (due to other areas of KVM being hardened) where
usersepace can bypass INIT_MEM_REGION's address wrap check by providing a
nr_pages that will overflow a u64 when converted to bytes, and fix an also-
benign off-by-one bug in the check (inclusive vs. exclusive).
- Set the vmcs.GUEST_ACTIVITY_STATE back to ACTIVE when userspace sets KVM's
mp_state to anything other than HALTED, e.g. so that a vCPU doesn't get
stuck in HLT if userspace emulates RESET.
Diffstat (limited to 'arch/x86/include')
| -rw-r--r-- | arch/x86/include/asm/kvm-x86-ops.h | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/kvm_host.h | 7 | ||||
| -rw-r--r-- | arch/x86/include/asm/vmx.h | 8 |
3 files changed, 16 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-x86-ops.h index 67b43c167045..48fa973b98d5 100644 --- a/arch/x86/include/asm/kvm-x86-ops.h +++ b/arch/x86/include/asm/kvm-x86-ops.h @@ -82,6 +82,7 @@ KVM_X86_OP(interrupt_allowed) KVM_X86_OP(nmi_allowed) KVM_X86_OP(get_nmi_mask) KVM_X86_OP(set_nmi_mask) +KVM_X86_OP_OPTIONAL(clear_hlt) KVM_X86_OP(enable_nmi_window) KVM_X86_OP(enable_irq_window) KVM_X86_OP_OPTIONAL(update_cr8_intercept) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 2a0245fa7e26..0378577d9d8b 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1621,6 +1621,13 @@ struct kvm_x86_ops { int (*nmi_allowed)(struct kvm_vcpu *vcpu, bool for_injection); bool (*get_nmi_mask)(struct kvm_vcpu *vcpu); void (*set_nmi_mask)(struct kvm_vcpu *vcpu, bool masked); + /* + * Force the vCPU out of any hardware-tracked halted/inactive state so + * that it will fetch and execute instructions on the next VM-Enter. + * Only needed by VMX, where VMCS.GUEST_ACTIVITY_STATE persists across + * VM-Exit/VM-Enter; SVM has no equivalent VMCB field. + */ + void (*clear_hlt)(struct kvm_vcpu *vcpu); /* Whether or not a virtual NMI is pending in hardware. */ bool (*is_vnmi_pending)(struct kvm_vcpu *vcpu); /* diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index 3f1b3096ff04..e49b836c7313 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h @@ -20,6 +20,14 @@ #include <asm/trapnr.h> #include <asm/vmxfeatures.h> +/* + * UNDEFINED is a KVM-defined value used to indicate that the basic exit reason + * is undefined/invalid, e.g. on VM-Fail or if TDX never attempted VM-Enter. + * The value itself is arbitrary, it just needs to not collide with a real exit + * reason. + */ +#define EXIT_REASON_UNDEFINED 0xdead + struct vmcs_hdr { u32 revision_id:31; u32 shadow_vmcs:1; |
