OSDN Git Service

KVM: x86: nSVM: always intercept x2apic msrs
authorMaxim Levitsky <mlevitsk@redhat.com>
Thu, 19 May 2022 10:27:02 +0000 (05:27 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 24 Jun 2022 16:50:26 +0000 (12:50 -0400)
As a preparation for x2avic, this patch ensures that x2apic msrs
are always intercepted for the nested guest.

Reviewed-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Tested-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20220519102709.24125-11-suravee.suthikulpanit@amd.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm/nested.c
arch/x86/kvm/svm/svm.h

index 83bae1f..adf4120 100644 (file)
@@ -230,6 +230,11 @@ static bool nested_svm_vmrun_msrpm(struct vcpu_svm *svm)
                        break;
 
                p      = msrpm_offsets[i];
+
+               /* x2apic msrs are intercepted always for the nested guest */
+               if (is_x2apic_msrpm_offset(p))
+                       continue;
+
                offset = svm->nested.ctl.msrpm_base_pa + (p * 4);
 
                if (kvm_vcpu_read_guest(&svm->vcpu, offset, &value, 4))
index 6d89842..288a138 100644 (file)
@@ -521,6 +521,15 @@ static inline bool nested_npt_enabled(struct vcpu_svm *svm)
        return svm->nested.ctl.nested_ctl & SVM_NESTED_CTL_NP_ENABLE;
 }
 
+static inline bool is_x2apic_msrpm_offset(u32 offset)
+{
+       /* 4 msrs per u8, and 4 u8 in u32 */
+       u32 msr = offset * 16;
+
+       return (msr >= APIC_BASE_MSR) &&
+              (msr < (APIC_BASE_MSR + 0x100));
+}
+
 /* svm.c */
 #define MSR_INVALID                            0xffffffffU