[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] Add support for disabling LBR recording after it has been enabled in HVMs using VMX. Signed-off-by: Angelo Sapello <asapello@xxxxxxxxxxxxx>
--- xen/arch/x86/hvm/vmx/vmx.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 011a817..149f28e 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2054,16 +2054,25 @@ static int vmx_msr_write_intercept(unsigned int msr, ui$ case MSR_IA32_DEBUGCTLMSR: { int i, rc = 0; uint64_t supported = IA32_DEBUGCTLMSR_LBR | IA32_DEBUGCTLMSR_BTF; + uint64_t old_msr_content, change_set; - if ( !msr_content ) +// Don't change everything, but just consider what features are being changed +// May be a little slow with the extra read, but changes to DEBUGCTLMSR should not be frequent +// ~ Angelo Sapello + old_msr_content = __vmread(GUEST_IA32_DEBUGCTL); + change_set = (old_msr_content ^ msr_content); + +// Setting DEBUGCTLMSR to zero is valid when disabling debug features +// only consider changes ~ AS + if ( !change_set ) break; - if ( msr_content & ~supported ) + if ( change_set & ~supported ) // Only consider bits that changed ~ AS { /* Perhaps some other bits are supported in vpmu. */ if ( !vpmu_do_wrmsr(msr, msr_content) ) break; } - if ( msr_content & IA32_DEBUGCTLMSR_LBR ) + if ( change_set & msr_content & IA32_DEBUGCTLMSR_LBR ) { const struct lbr_info *lbr = last_branch_msr_get(); if ( lbr == NULL ) @@ -2074,6 +2083,10 @@ static int vmx_msr_write_intercept(unsigned int msr, uint64_t msr_content) if ( (rc = vmx_add_guest_msr(lbr->base + i)) == 0 ) vmx_disable_intercept_for_msr(v, lbr->base + i, MSR_TYPE_R | MSR_TYPE_W); } +// NB that we can now reach here to turn off LBR recording +// Also, never turn actual LBRs (from IPs, to IPs) back off, since +// HVM may wish to read them in their frozen state. +// ~AS if ( (rc < 0) || (vmx_add_host_load_msr(msr) < 0) ) -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |