[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/2] x86/vmx: conditionally disable LBR support due to TSX format quirk
On Wed, Aug 10, 2016 at 06:34:10AM -0600, Jan Beulich wrote: > >>> On 10.08.16 at 08:59, <msw@xxxxxxxx> wrote: > > Systems that support LBR formats that include TSX information but do > > not support TSX require special handling when saving and restoring MSR > > values. For example, see the Linux kernel quirks[1, 2] in the MSR > > context switching code. As a wrmsr with certain values under these > > conditions causes a #GP, VM entry will fail due to MSR loading (see > > last bullet of SDM 26.4 "Loading MSRS"). > > I had recently noticed this as an area needing work too, so I'm glad > you (hopefully) eliminate this item from my todo list. However, I'm > sad to see that you really just disable LBR use in the problem case. > I'd prefer to take such a change only as an immediate workaround, > with the understanding that a proper one will be made available not > too much later. I agree that this is a short term workaround. I spent a while trying to fix up the values but I wasn't successful. > Jun, Kevin - workarounds for hardware quirks like this one are really > what I would think should come out of Intel, and preferably not > after the first problem report on Xen, but soon after the quirk has > got identified in general (which according to the Linux patches must > have been at least 2 months ago). +1 > > --- a/xen/arch/x86/hvm/vmx/vmx.c > > +++ b/xen/arch/x86/hvm/vmx/vmx.c > > @@ -2576,8 +2576,22 @@ static const struct lbr_info > > *last_branch_msr_get(void) > > /* Haswell */ > > case 60: case 63: case 69: case 70: > > /* Broadwell */ > > - case 61: case 71: case 79: case 86: > > + case 61: case 71: case 79: case 86: { > > + u64 caps; > > + bool_t tsx_support = boot_cpu_has(X86_FEATURE_HLE) || > > + boot_cpu_has(X86_FEATURE_RTM); > > + > > + rdmsrl(MSR_IA32_PERF_CAPABILITIES, caps); > > This is guarded by a X86_FEATURE_PDCM check in Linux - why > would we not need the same here? You're right, it should be. It also seems to be missing from core2_vpmu_init(). > Also I think this RDMSR should be performed once at boot, not every > time we come here. I thought you might say that. It didn't seem obviously right to put this in boot_cpu_data -- is that what you suggest? > > + /* > > + * Unimplemented fixups are required if the processor > > + * supports an LBR format that includes TSX information, > > + * but not TSX. Disable LBR save/load on such platforms. > > + */ > > + if ( !tsx_support && (caps & 4) ) > > As I understand it the low 6 bits of the MSR contain an enumeration > like value, so just checking bit 2 can't be right (and would wrongly > trigger on already defined format types 5 and 6 - even if those were > known to be impossible on the models currently covered, this would > be a latent trap for someone to fall into when adding further model > values). Fair point. --msw _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |