diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index f565731804..559c0662fa 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -1838,10 +1838,15 @@ extreme care.** An overall boolean value, `spec-ctrl=no`, can be specified to turn off all mitigations, including pieces of infrastructure used to virtualise certain -mitigation features for guests. Alternatively, a slightly more restricted -`spec-ctrl=no-xen` can be used to turn off all of Xen's mitigations, while -leaving the virtualisation support in place for guests to use. Use of a -positive boolean value for either of these options is invalid. +mitigation features for guests. This also includes settings which `xpti`, +`smt`, `pv-l1tf` control, unless the respective option(s) have been +specified earlier on the command line. + +Alternatively, a slightly more restricted `spec-ctrl=no-xen` can be used to +turn off all of Xen's mitigations, while leaving the virtualisation support +in place for guests to use. + +Use of a positive boolean value for either of these options is invalid. The booleans `pv=`, `hvm=`, `msr-sc=` and `rsb=` offer fine grained control over the alternative blocks used by Xen. These impact Xen's ability to diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c index 59baebb959..f0c50d6703 100644 --- a/xen/arch/x86/spec_ctrl.c +++ b/xen/arch/x86/spec_ctrl.c @@ -134,6 +134,15 @@ static int __init parse_spec_ctrl(const char *s) opt_eager_fpu = 0; + if ( opt_xpti < 0 ) + opt_xpti = 0; + + if ( opt_smt < 0 ) + opt_smt = 1; + + if ( opt_pv_l1tf < 0 ) + opt_pv_l1tf = 0; + disable_common: opt_rsb_pv = false; opt_rsb_hvm = false;