x86/speculation: Add a common function for MD_CLEAR mitigation update
commit f52ea6c26953fed339aa4eae717ee5c2133c7ff2 upstream Processor MMIO Stale Data mitigation uses similar mitigation as MDS and TAA. In preparation for adding its mitigation, add a common function to update all mitigations that depend on MD_CLEAR. [ bp: Add a newline in md_clear_update_mitigation() to separate statements better. ] 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
e66310bc96
commit
f83d4e5be4
@@ -41,7 +41,7 @@ static void __init spectre_v2_select_mitigation(void);
|
|||||||
static void __init ssb_select_mitigation(void);
|
static void __init ssb_select_mitigation(void);
|
||||||
static void __init l1tf_select_mitigation(void);
|
static void __init l1tf_select_mitigation(void);
|
||||||
static void __init mds_select_mitigation(void);
|
static void __init mds_select_mitigation(void);
|
||||||
static void __init mds_print_mitigation(void);
|
static void __init md_clear_update_mitigation(void);
|
||||||
static void __init taa_select_mitigation(void);
|
static void __init taa_select_mitigation(void);
|
||||||
static void __init srbds_select_mitigation(void);
|
static void __init srbds_select_mitigation(void);
|
||||||
|
|
||||||
@@ -114,10 +114,10 @@ void __init check_bugs(void)
|
|||||||
srbds_select_mitigation();
|
srbds_select_mitigation();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* As MDS and TAA mitigations are inter-related, print MDS
|
* As MDS and TAA mitigations are inter-related, update and print their
|
||||||
* mitigation until after TAA mitigation selection is done.
|
* mitigation after TAA mitigation selection is done.
|
||||||
*/
|
*/
|
||||||
mds_print_mitigation();
|
md_clear_update_mitigation();
|
||||||
|
|
||||||
arch_smt_update();
|
arch_smt_update();
|
||||||
|
|
||||||
@@ -258,14 +258,6 @@ static void __init mds_select_mitigation(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init mds_print_mitigation(void)
|
|
||||||
{
|
|
||||||
if (!boot_cpu_has_bug(X86_BUG_MDS) || cpu_mitigations_off())
|
|
||||||
return;
|
|
||||||
|
|
||||||
pr_info("%s\n", mds_strings[mds_mitigation]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init mds_cmdline(char *str)
|
static int __init mds_cmdline(char *str)
|
||||||
{
|
{
|
||||||
if (!boot_cpu_has_bug(X86_BUG_MDS))
|
if (!boot_cpu_has_bug(X86_BUG_MDS))
|
||||||
@@ -320,7 +312,7 @@ static void __init taa_select_mitigation(void)
|
|||||||
/* TSX previously disabled by tsx=off */
|
/* TSX previously disabled by tsx=off */
|
||||||
if (!boot_cpu_has(X86_FEATURE_RTM)) {
|
if (!boot_cpu_has(X86_FEATURE_RTM)) {
|
||||||
taa_mitigation = TAA_MITIGATION_TSX_DISABLED;
|
taa_mitigation = TAA_MITIGATION_TSX_DISABLED;
|
||||||
goto out;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu_mitigations_off()) {
|
if (cpu_mitigations_off()) {
|
||||||
@@ -334,7 +326,7 @@ static void __init taa_select_mitigation(void)
|
|||||||
*/
|
*/
|
||||||
if (taa_mitigation == TAA_MITIGATION_OFF &&
|
if (taa_mitigation == TAA_MITIGATION_OFF &&
|
||||||
mds_mitigation == MDS_MITIGATION_OFF)
|
mds_mitigation == MDS_MITIGATION_OFF)
|
||||||
goto out;
|
return;
|
||||||
|
|
||||||
if (boot_cpu_has(X86_FEATURE_MD_CLEAR))
|
if (boot_cpu_has(X86_FEATURE_MD_CLEAR))
|
||||||
taa_mitigation = TAA_MITIGATION_VERW;
|
taa_mitigation = TAA_MITIGATION_VERW;
|
||||||
@@ -366,18 +358,6 @@ static void __init taa_select_mitigation(void)
|
|||||||
|
|
||||||
if (taa_nosmt || cpu_mitigations_auto_nosmt())
|
if (taa_nosmt || cpu_mitigations_auto_nosmt())
|
||||||
cpu_smt_disable(false);
|
cpu_smt_disable(false);
|
||||||
|
|
||||||
/*
|
|
||||||
* Update MDS mitigation, if necessary, as the mds_user_clear is
|
|
||||||
* now enabled for TAA mitigation.
|
|
||||||
*/
|
|
||||||
if (mds_mitigation == MDS_MITIGATION_OFF &&
|
|
||||||
boot_cpu_has_bug(X86_BUG_MDS)) {
|
|
||||||
mds_mitigation = MDS_MITIGATION_FULL;
|
|
||||||
mds_select_mitigation();
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
pr_info("%s\n", taa_strings[taa_mitigation]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init tsx_async_abort_parse_cmdline(char *str)
|
static int __init tsx_async_abort_parse_cmdline(char *str)
|
||||||
@@ -401,6 +381,33 @@ static int __init tsx_async_abort_parse_cmdline(char *str)
|
|||||||
}
|
}
|
||||||
early_param("tsx_async_abort", tsx_async_abort_parse_cmdline);
|
early_param("tsx_async_abort", tsx_async_abort_parse_cmdline);
|
||||||
|
|
||||||
|
#undef pr_fmt
|
||||||
|
#define pr_fmt(fmt) "" fmt
|
||||||
|
|
||||||
|
static void __init md_clear_update_mitigation(void)
|
||||||
|
{
|
||||||
|
if (cpu_mitigations_off())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!static_key_enabled(&mds_user_clear))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mds_user_clear is now enabled. Update MDS mitigation, if
|
||||||
|
* necessary.
|
||||||
|
*/
|
||||||
|
if (mds_mitigation == MDS_MITIGATION_OFF &&
|
||||||
|
boot_cpu_has_bug(X86_BUG_MDS)) {
|
||||||
|
mds_mitigation = MDS_MITIGATION_FULL;
|
||||||
|
mds_select_mitigation();
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
if (boot_cpu_has_bug(X86_BUG_MDS))
|
||||||
|
pr_info("MDS: %s\n", mds_strings[mds_mitigation]);
|
||||||
|
if (boot_cpu_has_bug(X86_BUG_TAA))
|
||||||
|
pr_info("TAA: %s\n", taa_strings[taa_mitigation]);
|
||||||
|
}
|
||||||
|
|
||||||
#undef pr_fmt
|
#undef pr_fmt
|
||||||
#define pr_fmt(fmt) "SRBDS: " fmt
|
#define pr_fmt(fmt) "SRBDS: " fmt
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user