diff mbox series

KVM: VMX: Update PT MSR intercepts during filter change iff PT in host+guest

Message ID 20220712015838.1253995-1-seanjc@google.com (mailing list archive)
State New, archived
Headers show
Series KVM: VMX: Update PT MSR intercepts during filter change iff PT in host+guest | expand

Commit Message

Sean Christopherson July 12, 2022, 1:58 a.m. UTC
Update the Processor Trace (PT) MSR intercepts during a filter change if
and only if PT may be exposed to the guest, i.e. only if KVM is operating
in the so called "host+guest" mode where PT can be used simultaneously by
both the host and guest.  If PT is in system mode, the host is the sole
owner of PT and the MSRs should never be passed through to the guest.

Luckily the missed check only results in unnecessary work, as select RTIT
MSRs are passed through only when RTIT tracing is enabled "in" the guest,
and tracing can't be enabled in the guest when KVM is in system mode
(writes to guest.MSR_IA32_RTIT_CTL are disallowed).

Cc: Xiaoyao Li <xiaoyao.li@intel.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 arch/x86/kvm/vmx/vmx.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)


base-commit: 5406e590ac8fa33e390616031370806cdbcc5791

Comments

Xiaoyao Li July 12, 2022, 3:23 a.m. UTC | #1
On 7/12/2022 9:58 AM, Sean Christopherson wrote:
> Update the Processor Trace (PT) MSR intercepts during a filter change if
> and only if PT may be exposed to the guest, i.e. only if KVM is operating
> in the so called "host+guest" mode where PT can be used simultaneously by
> both the host and guest.  If PT is in system mode, the host is the sole
> owner of PT and the MSRs should never be passed through to the guest.
> 
> Luckily the missed check only results in unnecessary work, as select RTIT
> MSRs are passed through only when RTIT tracing is enabled "in" the guest,
> and tracing can't be enabled in the guest when KVM is in system mode
> (writes to guest.MSR_IA32_RTIT_CTL are disallowed).

Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>

> Cc: Xiaoyao Li <xiaoyao.li@intel.com>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
>   arch/x86/kvm/vmx/vmx.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> index 74ca64e97643..e6ab2c2c4d3b 100644
> --- a/arch/x86/kvm/vmx/vmx.c
> +++ b/arch/x86/kvm/vmx/vmx.c
> @@ -4004,7 +4004,9 @@ static void vmx_msr_filter_changed(struct kvm_vcpu *vcpu)
>   			vmx_disable_intercept_for_msr(vcpu, msr, MSR_TYPE_W);
>   	}
>   
> -	pt_update_intercept_for_msr(vcpu);
> +	/* PT MSRs can be passed through iff PT is exposed to the guest. */
> +	if (vmx_pt_mode_is_host_guest())
> +		pt_update_intercept_for_msr(vcpu);
>   }
>   
>   static inline void kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu,
> 
> base-commit: 5406e590ac8fa33e390616031370806cdbcc5791
diff mbox series

Patch

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 74ca64e97643..e6ab2c2c4d3b 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -4004,7 +4004,9 @@  static void vmx_msr_filter_changed(struct kvm_vcpu *vcpu)
 			vmx_disable_intercept_for_msr(vcpu, msr, MSR_TYPE_W);
 	}
 
-	pt_update_intercept_for_msr(vcpu);
+	/* PT MSRs can be passed through iff PT is exposed to the guest. */
+	if (vmx_pt_mode_is_host_guest())
+		pt_update_intercept_for_msr(vcpu);
 }
 
 static inline void kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu,