[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/spec-ctrl: Fix the parsing of xpti= on fixed Intel hardware
commit be5e2ff6f54e0245331ed360b8786760f82fd673 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Mon Jul 23 14:29:27 2018 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Tue Jul 24 11:25:54 2018 +0100 x86/spec-ctrl: Fix the parsing of xpti= on fixed Intel hardware The calls to xpti_init_default() in parse_xpti() are buggy. The CPUID data hasn't been fetched that early, and boot_cpu_has(X86_FEATURE_ARCH_CAPS) will always evaluate false. As a result, the default case won't disable XPTI on Intel hardware which advertises ARCH_CAPABILITIES_RDCL_NO. Simplify parse_xpti() to solely the setting of opt_xpti according to the passed string, and have init_speculation_mitigations() call xpti_init_default() if appropiate. Drop the force parameter, and pass caps instead, to avoid redundant re-reading of MSR_ARCH_CAPS. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/spec_ctrl.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c index 73dc7170c7..32a4ea6e99 100644 --- a/xen/arch/x86/spec_ctrl.c +++ b/xen/arch/x86/spec_ctrl.c @@ -423,17 +423,10 @@ static bool __init should_use_eager_fpu(void) #define OPT_XPTI_DEFAULT 0xff uint8_t __read_mostly opt_xpti = OPT_XPTI_DEFAULT; -static __init void xpti_init_default(bool force) +static __init void xpti_init_default(uint64_t caps) { - uint64_t caps = 0; - - if ( !force && (opt_xpti != OPT_XPTI_DEFAULT) ) - return; - if ( boot_cpu_data.x86_vendor == X86_VENDOR_AMD ) caps = ARCH_CAPABILITIES_RDCL_NO; - else if ( boot_cpu_has(X86_FEATURE_ARCH_CAPS) ) - rdmsrl(MSR_ARCH_CAPABILITIES, caps); if ( caps & ARCH_CAPABILITIES_RDCL_NO ) opt_xpti = 0; @@ -446,8 +439,6 @@ static __init int parse_xpti(const char *s) const char *ss; int val, rc = 0; - xpti_init_default(false); - do { ss = strchr(s, ','); if ( !ss ) @@ -465,7 +456,7 @@ static __init int parse_xpti(const char *s) default: if ( !strcmp(s, "default") ) - xpti_init_default(true); + opt_xpti = OPT_XPTI_DEFAULT; else if ( (val = parse_boolean("dom0", s, ss)) >= 0 ) opt_xpti = (opt_xpti & ~OPT_XPTI_DOM0) | (val ? OPT_XPTI_DOM0 : 0); @@ -627,7 +618,9 @@ void __init init_speculation_mitigations(void) if ( default_xen_spec_ctrl ) setup_force_cpu_cap(X86_FEATURE_SC_MSR_IDLE); - xpti_init_default(false); + if ( opt_xpti == OPT_XPTI_DEFAULT ) + xpti_init_default(caps); + if ( opt_xpti == 0 ) setup_force_cpu_cap(X86_FEATURE_NO_XPTI); else -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |