x86/spec-ctrl: Yet more fixes for xpti= parsing

As it currently stands, 'xpti=dom0' is indistinguishable from the default
value, which means it will be overridden by ARCH_CAPABILITIES_RDCL_NO on fixed
hardware.

Switch opt_xpti to use -1 as a default like all our other related options, and
clobber it as soon as we have a string to parse.

In addition, 'xpti' alone should be interpreted in its positive boolean form,
rather than resulting in a parse error.

  (XEN) parameter "xpti" has invalid value "", rc=-22!

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2018-08-10 14:02:26 +01:00
1 parent a2d9a6fa1f
commit 2a3b34ec47
2 files changed
+12 -5

No files matched your search

+11 -4
View File
@@ -420,8 +420,7 @@ static bool __init should_use_eager_fpu(void)
}
}
#define OPT_XPTI_DEFAULT 0xff
uint8_t __read_mostly opt_xpti = OPT_XPTI_DEFAULT;
int8_t __read_mostly opt_xpti = -1;
static __init void xpti_init_default(uint64_t caps)
{
@@ -439,6 +438,14 @@ static __init int parse_xpti(const char *s)
const char *ss;
int val, rc = 0;
/* Inhibit the defaults as an explicit choice has been given. */
if ( opt_xpti == -1 )
opt_xpti = 0;
/* Interpret 'xpti' alone in its positive boolean form. */
if ( *s == '\0' )
opt_xpti = OPT_XPTI_DOM0 | OPT_XPTI_DOMU;
do {
ss = strchr(s, ',');
if ( !ss )
@@ -456,7 +463,7 @@ static __init int parse_xpti(const char *s)
default:
if ( !strcmp(s, "default") )
opt_xpti = OPT_XPTI_DEFAULT;
opt_xpti = -1;
else if ( (val = parse_boolean("dom0", s, ss)) >= 0 )
opt_xpti = (opt_xpti & ~OPT_XPTI_DOM0) |
(val ? OPT_XPTI_DOM0 : 0);
@@ -618,7 +625,7 @@ void __init init_speculation_mitigations(void)
if ( default_xen_spec_ctrl )
setup_force_cpu_cap(X86_FEATURE_SC_MSR_IDLE);
if ( opt_xpti == OPT_XPTI_DEFAULT )
if ( opt_xpti == -1 )
xpti_init_default(caps);
if ( opt_xpti == 0 )
+1 -1
View File
@@ -34,7 +34,7 @@ extern bool bsp_delay_spec_ctrl;
extern uint8_t default_xen_spec_ctrl;
extern uint8_t default_spec_ctrl_flags;
extern uint8_t opt_xpti;
extern int8_t opt_xpti;
#define OPT_XPTI_DOM0 0x01
#define OPT_XPTI_DOMU 0x02
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.