[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/tsx: Cope with TSX deprecation on SKL/KBL/CFL/WHL
On 08.06.2021 19:05, Andrew Cooper wrote: > --- a/xen/arch/x86/tsx.c > +++ b/xen/arch/x86/tsx.c > @@ -60,6 +60,38 @@ void tsx_init(void) > */ > > /* > + * Probe for the June 2021 microcode which de-features TSX on > + * client parts. (Note - this is a subset of parts impacted by > + * the memory ordering errata.) > + * > + * RTM_ALWAYS_ABORT enumerates the new functionality, but is also > + * read as zero if TSX_FORCE_ABORT.ENABLE_RTM has been set before > + * we run. > + * > + * Undo this behaviour in Xen's view of the world. > + */ > + bool has_rtm_always_abort = cpu_has_rtm_always_abort; > + > + if ( !has_rtm_always_abort ) > + { > + uint64_t val; > + > + rdmsrl(MSR_TSX_FORCE_ABORT, val); > + > + if ( val & TSX_ENABLE_RTM ) > + has_rtm_always_abort = true; > + } > + > + /* > + * Always force RTM_ALWAYS_ABORT to be visibile, even if it > + * currently is. If the user explicitly opts to enable TSX, > we'll > + * set TSX_FORCE_ABORT.ENABLE_RTM and hide RTM_ALWAYS_ABORT from > + * the general CPUID scan later. > + */ > + if ( has_rtm_always_abort ) > + setup_force_cpu_cap(X86_FEATURE_RTM_ALWAYS_ABORT); I understand the "we'll set" part, but I don't think "we'll hide" anything explicitly. Aiui it is ... > @@ -131,9 +170,36 @@ void tsx_init(void) > /* Check bottom bit only. Higher bits are various sentinels. */ > rtm_disabled = !(opt_tsx & 1); > > - lo &= ~TSX_FORCE_ABORT_RTM; > - if ( rtm_disabled ) > - lo |= TSX_FORCE_ABORT_RTM; > + lo &= ~(TSX_FORCE_ABORT_RTM | TSX_CPUID_CLEAR | TSX_ENABLE_RTM); > + > + if ( cpu_has_rtm_always_abort ) > + { > + /* > + * June 2021 microcode, on a client part with TSX de-featured: > + * - There are no mitigations for the TSX memory ordering > errata. > + * - Performance counter 3 works. (I.e. it isn't being used by > + * microcode to work around the memory ordering errata.) > + * - TSX_FORCE_ABORT.FORCE_ABORT_RTM is fixed > read1/write-discard. > + * - TSX_FORCE_ABORT.TSX_CPUID_CLEAR can be used to hide the > + * HLE/RTM CPUID bits. > + * - TSX_FORCE_ABORT.ENABLE_RTM may be used to opt in to > + * re-enabling RTM, at the users own risk. > + */ > + lo |= rtm_disabled ? TSX_CPUID_CLEAR : TSX_ENABLE_RTM; ... the setting of TSX_ENABLE_RTM here which, as a result, causes RTM_ALWAYS_ABORT to be clear. If that's correct, perhaps the wording in that earlier comment would better be something like "we'll set TSX_FORCE_ABORT.ENABLE_RTM and hence cause RTM_ALWAYS_ABORT to be hidden from the general CPUID scan later"? If this understanding of mine is correct, then preferably with some suitable adjustment to the comment wording Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Also Intel recommends this for SDVs only - can we consider such a setup supported (not to speak of security supported) at all? I guess you mean to express this by saying "at their own risk" in the cmdline doc? If so, perhaps mentioning this in SUPPORT.md would be a good thing nevertheless, notwithstanding the fact that we're not really good at expressing there how command line option use affects support status. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |