99 lines
2.9 KiB
Diff
99 lines
2.9 KiB
Diff
From: Tyler Hicks <tyhicks@canonical.com>
|
|
Date: Mon, 4 Nov 2019 12:22:02 +0100
|
|
Subject: cpu/speculation: Uninline and export CPU mitigations helpers
|
|
|
|
commit 731dc9df975a5da21237a18c3384f811a7a41cc6 upstream.
|
|
|
|
A kernel module may need to check the value of the "mitigations=" kernel
|
|
command line parameter as part of its setup when the module needs
|
|
to perform software mitigations for a CPU flaw.
|
|
|
|
Uninline and export the helper functions surrounding the cpu_mitigations
|
|
enum to allow for their usage from a module.
|
|
|
|
Lastly, privatize the enum and cpu_mitigations variable since the value of
|
|
cpu_mitigations can be checked with the exported helper functions.
|
|
|
|
Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
---
|
|
include/linux/cpu.h | 25 ++-----------------------
|
|
kernel/cpu.c | 27 ++++++++++++++++++++++++++-
|
|
2 files changed, 28 insertions(+), 24 deletions(-)
|
|
|
|
--- a/include/linux/cpu.h
|
|
+++ b/include/linux/cpu.h
|
|
@@ -198,28 +198,7 @@ static inline int cpuhp_smt_enable(void)
|
|
static inline int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) { return 0; }
|
|
#endif
|
|
|
|
-/*
|
|
- * These are used for a global "mitigations=" cmdline option for toggling
|
|
- * optional CPU mitigations.
|
|
- */
|
|
-enum cpu_mitigations {
|
|
- CPU_MITIGATIONS_OFF,
|
|
- CPU_MITIGATIONS_AUTO,
|
|
- CPU_MITIGATIONS_AUTO_NOSMT,
|
|
-};
|
|
-
|
|
-extern enum cpu_mitigations cpu_mitigations;
|
|
-
|
|
-/* mitigations=off */
|
|
-static inline bool cpu_mitigations_off(void)
|
|
-{
|
|
- return cpu_mitigations == CPU_MITIGATIONS_OFF;
|
|
-}
|
|
-
|
|
-/* mitigations=auto,nosmt */
|
|
-static inline bool cpu_mitigations_auto_nosmt(void)
|
|
-{
|
|
- return cpu_mitigations == CPU_MITIGATIONS_AUTO_NOSMT;
|
|
-}
|
|
+extern bool cpu_mitigations_off(void);
|
|
+extern bool cpu_mitigations_auto_nosmt(void);
|
|
|
|
#endif /* _LINUX_CPU_H_ */
|
|
--- a/kernel/cpu.c
|
|
+++ b/kernel/cpu.c
|
|
@@ -2282,7 +2282,18 @@ void __init boot_cpu_hotplug_init(void)
|
|
this_cpu_write(cpuhp_state.state, CPUHP_ONLINE);
|
|
}
|
|
|
|
-enum cpu_mitigations cpu_mitigations __ro_after_init = CPU_MITIGATIONS_AUTO;
|
|
+/*
|
|
+ * These are used for a global "mitigations=" cmdline option for toggling
|
|
+ * optional CPU mitigations.
|
|
+ */
|
|
+enum cpu_mitigations {
|
|
+ CPU_MITIGATIONS_OFF,
|
|
+ CPU_MITIGATIONS_AUTO,
|
|
+ CPU_MITIGATIONS_AUTO_NOSMT,
|
|
+};
|
|
+
|
|
+static enum cpu_mitigations cpu_mitigations __ro_after_init =
|
|
+ CPU_MITIGATIONS_AUTO;
|
|
|
|
static int __init mitigations_parse_cmdline(char *arg)
|
|
{
|
|
@@ -2299,3 +2310,17 @@ static int __init mitigations_parse_cmdl
|
|
return 0;
|
|
}
|
|
early_param("mitigations", mitigations_parse_cmdline);
|
|
+
|
|
+/* mitigations=off */
|
|
+bool cpu_mitigations_off(void)
|
|
+{
|
|
+ return cpu_mitigations == CPU_MITIGATIONS_OFF;
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(cpu_mitigations_off);
|
|
+
|
|
+/* mitigations=auto,nosmt */
|
|
+bool cpu_mitigations_auto_nosmt(void)
|
|
+{
|
|
+ return cpu_mitigations == CPU_MITIGATIONS_AUTO_NOSMT;
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(cpu_mitigations_auto_nosmt);
|