x86/tsx: Add "auto" option to the tsx= cmdline parameter

commit 7531a3596e3272d1f6841e0d601a614555dc6b65 upstream.

Platforms which are not affected by X86_BUG_TAA may want the TSX feature
enabled. Add "auto" option to the TSX cmdline parameter. When tsx=auto
disable TSX when X86_BUG_TAA is present, otherwise enable TSX.

More details on X86_BUG_TAA can be found here:
https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html

 [ bp: Extend the arg buffer to accommodate "auto\0". ]

Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
[bwh: Backported to 4.4: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Pawan Gupta 2019-10-23 12:28:57 +02:00 committed by Greg Kroah-Hartman
parent 5b3b71385e
commit f6eabafe0f
2 changed files with 9 additions and 1 deletions

View file

@ -4073,6 +4073,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
update. This new MSR allows for the reliable update. This new MSR allows for the reliable
deactivation of the TSX functionality.) deactivation of the TSX functionality.)
auto - Disable TSX if X86_BUG_TAA is present,
otherwise enable TSX on the system.
Not specifying this option is equivalent to tsx=off. Not specifying this option is equivalent to tsx=off.
See Documentation/hw-vuln/tsx_async_abort.rst See Documentation/hw-vuln/tsx_async_abort.rst

View file

@ -75,7 +75,7 @@ static bool __init tsx_ctrl_is_supported(void)
void __init tsx_init(void) void __init tsx_init(void)
{ {
char arg[4] = {}; char arg[5] = {};
int ret; int ret;
if (!tsx_ctrl_is_supported()) if (!tsx_ctrl_is_supported())
@ -87,6 +87,11 @@ void __init tsx_init(void)
tsx_ctrl_state = TSX_CTRL_ENABLE; tsx_ctrl_state = TSX_CTRL_ENABLE;
} else if (!strcmp(arg, "off")) { } else if (!strcmp(arg, "off")) {
tsx_ctrl_state = TSX_CTRL_DISABLE; tsx_ctrl_state = TSX_CTRL_DISABLE;
} else if (!strcmp(arg, "auto")) {
if (boot_cpu_has_bug(X86_BUG_TAA))
tsx_ctrl_state = TSX_CTRL_DISABLE;
else
tsx_ctrl_state = TSX_CTRL_ENABLE;
} else { } else {
tsx_ctrl_state = TSX_CTRL_DISABLE; tsx_ctrl_state = TSX_CTRL_DISABLE;
pr_err("tsx: invalid option, defaulting to off\n"); pr_err("tsx: invalid option, defaulting to off\n");