| From c73f4c998e1fd4249b9edfa39e23f4fda2b9b041 Mon Sep 17 00:00:00 2001 |
| From: Marc Orr <marcorr@google.com> |
| Date: Mon, 1 Apr 2019 23:56:00 -0700 |
| Subject: KVM: x86: nVMX: fix x2APIC VTPR read intercept |
| |
| From: Marc Orr <marcorr@google.com> |
| |
| commit c73f4c998e1fd4249b9edfa39e23f4fda2b9b041 upstream. |
| |
| Referring to the "VIRTUALIZING MSR-BASED APIC ACCESSES" chapter of the |
| SDM, when "virtualize x2APIC mode" is 1 and "APIC-register |
| virtualization" is 0, a RDMSR of 808H should return the VTPR from the |
| virtual APIC page. |
| |
| However, for nested, KVM currently fails to disable the read intercept |
| for this MSR. This means that a RDMSR exit takes precedence over |
| "virtualize x2APIC mode", and KVM passes through L1's TPR to L2, |
| instead of sourcing the value from L2's virtual APIC page. |
| |
| This patch fixes the issue by disabling the read intercept, in VMCS02, |
| for the VTPR when "APIC-register virtualization" is 0. |
| |
| The issue described above and fix prescribed here, were verified with |
| a related patch in kvm-unit-tests titled "Test VMX's virtualize x2APIC |
| mode w/ nested". |
| |
| Signed-off-by: Marc Orr <marcorr@google.com> |
| Reviewed-by: Jim Mattson <jmattson@google.com> |
| Fixes: c992384bde84f ("KVM: vmx: speed up MSR bitmap merge") |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kvm/vmx/nested.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/kvm/vmx/nested.c |
| +++ b/arch/x86/kvm/vmx/nested.c |
| @@ -578,7 +578,7 @@ static inline bool nested_vmx_prepare_ms |
| nested_vmx_disable_intercept_for_msr( |
| msr_bitmap_l1, msr_bitmap_l0, |
| X2APIC_MSR(APIC_TASKPRI), |
| - MSR_TYPE_W); |
| + MSR_TYPE_R | MSR_TYPE_W); |
| |
| if (nested_cpu_has_vid(vmcs12)) { |
| nested_vmx_disable_intercept_for_msr( |