[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/5] x86/lbr: enable hypervisor LER with arch LBR
On 01.07.2022 17:39, Roger Pau Monné wrote: > On Mon, May 30, 2022 at 05:31:18PM +0200, Jan Beulich wrote: >> On 20.05.2022 15:37, Roger Pau Monne wrote: >>> --- a/xen/arch/x86/include/asm/msr-index.h >>> +++ b/xen/arch/x86/include/asm/msr-index.h >>> @@ -139,6 +139,24 @@ >>> #define PASID_PASID_MASK 0x000fffff >>> #define PASID_VALID (_AC(1, ULL) << 31) >>> >>> +#define MSR_ARCH_LBR_CTL 0x000014ce >>> +#define ARCH_LBR_CTL_LBREN (_AC(1, ULL) << 0) >>> +#define ARCH_LBR_CTL_OS (_AC(1, ULL) << 1) >> >> Bits 2 and 3 also have meaning (USR and CALL_STACK) according to >> ISE version 44. If it was intentional that you omitted those >> (perhaps you intended to add only the bits you actually use right >> away), it would have been nice if you said so in the description. > > Yes, I've only added the bits used. I could add all if that's better. Personally I'd slightly prefer if you added all. But if you don't, which is also okay, please make this explicit in the description. >>> --- a/xen/arch/x86/traps.c >>> +++ b/xen/arch/x86/traps.c >>> @@ -1963,6 +1963,29 @@ void do_device_not_available(struct cpu_user_regs >>> *regs) >>> #endif >>> } >>> >>> +static bool enable_lbr(void) >>> +{ >>> + uint64_t debugctl; >>> + >>> + wrmsrl(MSR_IA32_DEBUGCTLMSR, IA32_DEBUGCTLMSR_LBR); >>> + rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl); >>> + if ( !(debugctl & IA32_DEBUGCTLMSR_LBR) ) >>> + { >>> + /* >>> + * CPUs with no model-specific LBRs always return DEBUGCTLMSR.LBR >>> + * == 0, attempt to set arch LBR if available. >>> + */ >>> + if ( !boot_cpu_has(X86_FEATURE_ARCH_LBR) ) >>> + return false; >>> + >>> + /* Note that LASTINT{FROMIP,TOIP} matches LER_{FROM_IP,TO_IP} */ >>> + wrmsrl(MSR_ARCH_LBR_CTL, ARCH_LBR_CTL_LBREN | ARCH_LBR_CTL_OS | >>> + ARCH_LBR_CTL_RECORD_ALL); >>> + } >>> + >>> + return true; >>> +} >> >> Would it make sense to try architectural LBRs first? > > I didn't want to change behavior for existing platforms that have > both architectural and model specific LBRs. Are there such platforms? While it may not be said explicitly, so far I took it that the LBR format indicator being 0x3f was connected to arch LBR being available. >> As there's no good place to ask the VMX-related question, it needs to >> go here: Aiui with this patch in place VMX guests will be run with >> Xen's choice of LBR_CTL. That's different from DebugCtl, which - being >> part of the VMCS - would be loaded by the CPU. Such a difference, if >> intended, would imo again want pointing out in the description. > > LBR_CTL will only be set by Xen when the CPU only supports > architectural LBRs (no model specific LBR support at all), and in that > case LBR support won't be exposed to guests, as the ARCH_LBR CPUID is > not exposed, neither are guests allowed access to ARCH_LBR_CTL. > > Note that in such scenario also setting DebugCtl.LBR has not effect, as > there's no model specific LBR support, and the hardware will just > ignore the bit. Also none of the LBR MSRs are exposed to guests > either. My question wasn't about guest support, but about us (perhaps mistakenly) running guest code with the Xen setting in place. It cannot be excluded that running with LBR enabled has a performance impact, after all. > I can try to clarify all the above in the commit message. Thanks. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |