Currently, Intel Processor Trace do not support tracing in L1 guest
VMX operation(IA32_VMX_MISC[bit 14] is 0). As mentioned in SDM,
on these type of processors, execution of the VMXON instruction will
clears IA32_RTIT_CTL.TraceEn and any attempt to write IA32_RTIT_CTL
causes a general-protection xception (#GP).

Signed-off-by: Luwei Kang <[email protected]>
---
 arch/x86/kvm/vmx.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index e002a44..b4ad8fc 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -7573,6 +7573,12 @@ static int handle_vmon(struct kvm_vcpu *vcpu)
        if (ret)
                return ret;
 
+       if (pt_mode == PT_MODE_HOST_GUEST) {
+               vmx->pt_desc.guest.ctl &= ~RTIT_CTL_TRACEEN;
+               pt_disable_intercept_for_msr(FALSE);
+               vmcs_write64(GUEST_IA32_RTIT_CTL, vmx->pt_desc.guest.ctl);
+       }
+
        nested_vmx_succeed(vcpu);
        return kvm_skip_emulated_instruction(vcpu);
 }
-- 
1.8.3.1

Reply via email to