KVM: x86/xen: Add an #ifdef'd helper to detect writes to Xen MSR

Add a helper to detect writes to the Xen hypercall page MSR, and provide a
stub for CONFIG_KVM_XEN=n to optimize out the check for kernels built
without Xen support.

Reviewed-by: Paul Durrant <paul@xen.org>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
Link: https://lore.kernel.org/r/20250215011437.1203084-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
Sean Christopherson 2025-02-14 17:14:34 -08:00
parent 5c17848134
commit bb0978d95a
2 changed files with 11 additions and 1 deletions

View File

@ -3738,7 +3738,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
* page setup; it could incur locking paths which are not expected
* if userspace sets the MSR in an unusual location.
*/
if (msr && msr == vcpu->kvm->arch.xen_hvm_config.msr &&
if (kvm_xen_is_hypercall_page_msr(vcpu->kvm, msr) &&
!msr_info->host_initiated)
return kvm_xen_write_hypercall_page(vcpu, data);

View File

@ -56,6 +56,11 @@ static inline bool kvm_xen_msr_enabled(struct kvm *kvm)
kvm->arch.xen_hvm_config.msr;
}
static inline bool kvm_xen_is_hypercall_page_msr(struct kvm *kvm, u32 msr)
{
return msr && msr == kvm->arch.xen_hvm_config.msr;
}
static inline bool kvm_xen_hypercall_enabled(struct kvm *kvm)
{
return static_branch_unlikely(&kvm_xen_enabled.key) &&
@ -124,6 +129,11 @@ static inline bool kvm_xen_msr_enabled(struct kvm *kvm)
return false;
}
static inline bool kvm_xen_is_hypercall_page_msr(struct kvm *kvm, u32 msr)
{
return false;
}
static inline bool kvm_xen_hypercall_enabled(struct kvm *kvm)
{
return false;