From: Andrew Cooper Date: Wed, 12 Sep 2018 13:36:00 +0000 (+0100) Subject: x86/spec-ctrl: Reposition the XPTI command line parsing logic X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1612f15a7e3da273482faa33f79473e3293499cb;p=xen.git x86/spec-ctrl: Reposition the XPTI command line parsing logic It has ended up in the middle of the mitigation calculation logic. Move it to be beside the other command line parsing. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich (cherry picked from commit c2c2bb0d60c642e64a5243a79c8b1548ffb7bc5b) --- diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c index 25da6a2e95..9665ec58d3 100644 --- a/xen/arch/x86/spec_ctrl.c +++ b/xen/arch/x86/spec_ctrl.c @@ -206,6 +206,73 @@ static int __init parse_spec_ctrl(char *s) } custom_param("spec-ctrl", parse_spec_ctrl); +int8_t __read_mostly opt_xpti_hwdom = -1; +int8_t __read_mostly opt_xpti_domu = -1; + +static __init void xpti_init_default(uint64_t caps) +{ + if ( boot_cpu_data.x86_vendor == X86_VENDOR_AMD ) + caps = ARCH_CAPABILITIES_RDCL_NO; + + if ( caps & ARCH_CAPABILITIES_RDCL_NO ) + { + if ( opt_xpti_hwdom < 0 ) + opt_xpti_hwdom = 0; + if ( opt_xpti_domu < 0 ) + opt_xpti_domu = 0; + } + else + { + if ( opt_xpti_hwdom < 0 ) + opt_xpti_hwdom = 1; + if ( opt_xpti_domu < 0 ) + opt_xpti_domu = 1; + } +} + +static __init int parse_xpti(char *s) +{ + char *ss; + int val, rc = 0; + + /* Interpret 'xpti' alone in its positive boolean form. */ + if ( *s == '\0' ) + opt_xpti_hwdom = opt_xpti_domu = 1; + + do { + ss = strchr(s, ','); + if ( ss ) + *ss = '\0'; + + switch ( parse_bool(s) ) + { + case 0: + opt_xpti_hwdom = opt_xpti_domu = 0; + break; + + case 1: + opt_xpti_hwdom = opt_xpti_domu = 1; + break; + + default: + if ( !strcmp(s, "default") ) + opt_xpti_hwdom = opt_xpti_domu = -1; + else if ( (val = parse_boolean("dom0", s, ss)) >= 0 ) + opt_xpti_hwdom = val; + else if ( (val = parse_boolean("domu", s, ss)) >= 0 ) + opt_xpti_domu = val; + else if ( *s ) + rc = -EINVAL; + break; + } + + s = ss + 1; + } while ( ss ); + + return rc; +} +custom_param("xpti", parse_xpti); + int8_t __read_mostly opt_pv_l1tf_hwdom = -1; int8_t __read_mostly opt_pv_l1tf_domu = -1; @@ -639,73 +706,6 @@ static __init void l1tf_calculations(uint64_t caps) : (3ul << (paddr_bits - 2)))); } -int8_t __read_mostly opt_xpti_hwdom = -1; -int8_t __read_mostly opt_xpti_domu = -1; - -static __init void xpti_init_default(uint64_t caps) -{ - if ( boot_cpu_data.x86_vendor == X86_VENDOR_AMD ) - caps = ARCH_CAPABILITIES_RDCL_NO; - - if ( caps & ARCH_CAPABILITIES_RDCL_NO ) - { - if ( opt_xpti_hwdom < 0 ) - opt_xpti_hwdom = 0; - if ( opt_xpti_domu < 0 ) - opt_xpti_domu = 0; - } - else - { - if ( opt_xpti_hwdom < 0 ) - opt_xpti_hwdom = 1; - if ( opt_xpti_domu < 0 ) - opt_xpti_domu = 1; - } -} - -static __init int parse_xpti(char *s) -{ - char *ss; - int val, rc = 0; - - /* Interpret 'xpti' alone in its positive boolean form. */ - if ( *s == '\0' ) - opt_xpti_hwdom = opt_xpti_domu = 1; - - do { - ss = strchr(s, ','); - if ( ss ) - *ss = '\0'; - - switch ( parse_bool(s) ) - { - case 0: - opt_xpti_hwdom = opt_xpti_domu = 0; - break; - - case 1: - opt_xpti_hwdom = opt_xpti_domu = 1; - break; - - default: - if ( !strcmp(s, "default") ) - opt_xpti_hwdom = opt_xpti_domu = -1; - else if ( (val = parse_boolean("dom0", s, ss)) >= 0 ) - opt_xpti_hwdom = val; - else if ( (val = parse_boolean("domu", s, ss)) >= 0 ) - opt_xpti_domu = val; - else if ( *s ) - rc = -EINVAL; - break; - } - - s = ss + 1; - } while ( ss ); - - return rc; -} -custom_param("xpti", parse_xpti); - void __init init_speculation_mitigations(void) { enum ind_thunk thunk = THUNK_DEFAULT;