summaryrefslogtreecommitdiffstats
path: root/include/linux/cpu.h
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2018-05-29 17:48:27 +0200
committerThomas Gleixner <tglx@linutronix.de>2018-06-21 14:20:58 +0200
commit05736e4ac13c08a4a9b1ef2de26dd31a32cbee57 (patch)
treedbd83041b6208c02967f398cbf32f8cfd1b83db7 /include/linux/cpu.h
parentcc1fe215e1efa406b03aa4389e6269b61342dec5 (diff)
downloadlinux-05736e4ac13c08a4a9b1ef2de26dd31a32cbee57.tar.gz
linux-05736e4ac13c08a4a9b1ef2de26dd31a32cbee57.tar.bz2
linux-05736e4ac13c08a4a9b1ef2de26dd31a32cbee57.zip
cpu/hotplug: Provide knobs to control SMT
Provide a command line and a sysfs knob to control SMT. The command line options are: 'nosmt': Enumerate secondary threads, but do not online them 'nosmt=force': Ignore secondary threads completely during enumeration via MP table and ACPI/MADT. The sysfs control file has the following states (read/write): 'on': SMT is enabled. Secondary threads can be freely onlined 'off': SMT is disabled. Secondary threads, even if enumerated cannot be onlined 'forceoff': SMT is permanentely disabled. Writes to the control file are rejected. 'notsupported': SMT is not supported by the CPU The command line option 'nosmt' sets the sysfs control to 'off'. This can be changed to 'on' to reenable SMT during runtime. The command line option 'nosmt=force' sets the sysfs control to 'forceoff'. This cannot be changed during runtime. When SMT is 'on' and the control file is changed to 'off' then all online secondary threads are offlined and attempts to online a secondary thread later on are rejected. When SMT is 'off' and the control file is changed to 'on' then secondary threads can be onlined again. The 'off' -> 'on' transition does not automatically online the secondary threads. When the control file is set to 'forceoff', the behaviour is the same as setting it to 'off', but the operation is irreversible and later writes to the control file are rejected. When the control status is 'notsupported' then writes to the control file are rejected. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Acked-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/linux/cpu.h')
-rw-r--r--include/linux/cpu.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index d3da5184aa1c..7532cbf27b1d 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -168,4 +168,17 @@ void cpuhp_report_idle_dead(void);
static inline void cpuhp_report_idle_dead(void) { }
#endif /* #ifdef CONFIG_HOTPLUG_CPU */
+enum cpuhp_smt_control {
+ CPU_SMT_ENABLED,
+ CPU_SMT_DISABLED,
+ CPU_SMT_FORCE_DISABLED,
+ CPU_SMT_NOT_SUPPORTED,
+};
+
+#if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
+extern enum cpuhp_smt_control cpu_smt_control;
+#else
+# define cpu_smt_control (CPU_SMT_ENABLED)
+#endif
+
#endif /* _LINUX_CPU_H_ */