]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: VMX: Add host MSR read/write helpers to consolidate preemption handling
authorSean Christopherson <seanjc@google.com>
Thu, 26 Jun 2025 17:16:01 +0000 (10:16 -0700)
committerSean Christopherson <seanjc@google.com>
Tue, 19 Aug 2025 18:00:18 +0000 (11:00 -0700)
Add host MSR read/write helpers to consolidate preemption handling to
prepare for adding FRED RSP0 access functions without duplicating the
preemption handling code.

Signed-off-by: Xin Li (Intel) <xin@zytor.com>
Link: https://lore.kernel.org/r/20250626171601.2293914-1-xin@zytor.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/vmx/vmx.c

index 92fe8d2003354e6764d9abe0c57a672e0ed2458e..6ed6c9e975773ec6f3f0603b6b81594aec540de3 100644 (file)
@@ -1344,22 +1344,35 @@ static void vmx_prepare_switch_to_host(struct vcpu_vmx *vmx)
 }
 
 #ifdef CONFIG_X86_64
-static u64 vmx_read_guest_kernel_gs_base(struct vcpu_vmx *vmx)
+static u64 vmx_read_guest_host_msr(struct vcpu_vmx *vmx, u32 msr, u64 *cache)
 {
        preempt_disable();
        if (vmx->vt.guest_state_loaded)
-               rdmsrq(MSR_KERNEL_GS_BASE, vmx->msr_guest_kernel_gs_base);
+               *cache = read_msr(msr);
        preempt_enable();
-       return vmx->msr_guest_kernel_gs_base;
+       return *cache;
 }
 
-static void vmx_write_guest_kernel_gs_base(struct vcpu_vmx *vmx, u64 data)
+static void vmx_write_guest_host_msr(struct vcpu_vmx *vmx, u32 msr, u64 data,
+                                    u64 *cache)
 {
        preempt_disable();
        if (vmx->vt.guest_state_loaded)
-               wrmsrq(MSR_KERNEL_GS_BASE, data);
+               wrmsrns(msr, data);
        preempt_enable();
-       vmx->msr_guest_kernel_gs_base = data;
+       *cache = data;
+}
+
+static u64 vmx_read_guest_kernel_gs_base(struct vcpu_vmx *vmx)
+{
+       return vmx_read_guest_host_msr(vmx, MSR_KERNEL_GS_BASE,
+                                      &vmx->msr_guest_kernel_gs_base);
+}
+
+static void vmx_write_guest_kernel_gs_base(struct vcpu_vmx *vmx, u64 data)
+{
+       vmx_write_guest_host_msr(vmx, MSR_KERNEL_GS_BASE, data,
+                                &vmx->msr_guest_kernel_gs_base);
 }
 #endif