All of lore.kernel.org
 help / color / mirror / Atom feed
* [MODERATED] [PATCH 1/1] Linux patch #1
@ 2018-06-28 22:53 Jiri Kosina
  2018-06-28 23:15 ` [MODERATED] " Jiri Kosina
                   ` (3 more replies)
  0 siblings, 4 replies; 55+ messages in thread
From: Jiri Kosina @ 2018-06-28 22:53 UTC (permalink / raw)
  To: speck

Introduce 'l1tf=nosmt' boot option to allow for turning off SMT during boot
automatically on CPUs affected by L1TF.

This parameter could be further extended to cover other possible 
mitigations or to be consumed by hypervisors when deciding on which 
mitigations to apply.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
---

If this is accepted, I think the KVM knobs toggling which kind of L1D 
flushes (if any) to do on vmenter should be added as additional 'l1tf=' 
parameter (once the KVM pile gets applied).

Thanks.

 Documentation/admin-guide/kernel-parameters.txt |  4 ++++
 arch/x86/kernel/cpu/bugs.c                      | 18 +++++++++++++++++-
 include/linux/cpu.h                             |  2 ++
 kernel/cpu.c                                    | 14 ++++++++++++--
 4 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 8e29c4b6756f..8e9594aeb841 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1971,6 +1971,10 @@
 			feature (tagged TLBs) on capable Intel chips.
 			Default is 1 (enabled)
 
+	l1tf=           [X86] Control mitigation of L1TF vulnerability.
+			nosmt	disable hyper-threading on CPUs vulnerable to
+				L1TF
+
 	l2cr=		[PPC]
 
 	l3cr=		[PPC]
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 50500cea6eba..65e8b32e51a6 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -682,6 +682,21 @@ static void __init l1tf_select_mitigation(void)
 
 	setup_force_cpu_cap(X86_FEATURE_L1TF_PTEINV);
 }
+
+static bool l1tf_nosmt;
+
+static int __init l1tf_cmdline(char *str)
+{
+	if (str && !strcmp(str, "nosmt")) {
+		l1tf_nosmt = true;
+		cpu_smt_disable(true);
+	}
+
+	return 0;
+}
+
+early_param("l1tf", l1tf_cmdline);
+
 #undef pr_fmt
 
 #ifdef CONFIG_SYSFS
@@ -713,7 +728,8 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
 
 	case X86_BUG_L1TF:
 		if (boot_cpu_has(X86_FEATURE_L1TF_PTEINV))
-			return sprintf(buf, "Mitigation: Page Table Inversion\n");
+			return sprintf(buf, "Mitigation: Page Table Inversion %s\n",
+					l1tf_nosmt ? "+ HT off" : "");
 		break;
 
 	default:
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 7532cbf27b1d..26acd9f51df1 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -177,8 +177,10 @@ enum cpuhp_smt_control {
 
 #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
 extern enum cpuhp_smt_control cpu_smt_control;
+void cpu_smt_disable(bool force);
 #else
 # define cpu_smt_control		(CPU_SMT_ENABLED)
+static inline void cpu_smt_disable(bool) { return; }
 #endif
 
 #endif /* _LINUX_CPU_H_ */
diff --git a/kernel/cpu.c b/kernel/cpu.c
index d29fdd7e57bb..d2e790debc6d 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -936,13 +936,23 @@ EXPORT_SYMBOL(cpu_down);
 #ifdef CONFIG_HOTPLUG_SMT
 enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
 
-static int __init smt_cmdline_disable(char *str)
+void __init cpu_smt_disable(bool force)
 {
 	cpu_smt_control = CPU_SMT_DISABLED;
-	if (str && !strcmp(str, "force")) {
+	if (force) {
 		pr_info("SMT: Force disabled\n");
 		cpu_smt_control = CPU_SMT_FORCE_DISABLED;
 	}
+	return;
+}
+
+static int __init smt_cmdline_disable(char *str)
+{
+	if (str && !strcmp(str, "force"))
+		cpu_smt_disable(true);
+	else
+		cpu_smt_disable(false);
+
 	return 0;
 }
 early_param("nosmt", smt_cmdline_disable);

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply related	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2018-07-05 23:50 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-28 22:53 [MODERATED] [PATCH 1/1] Linux patch #1 Jiri Kosina
2018-06-28 23:15 ` [MODERATED] " Jiri Kosina
2018-06-28 23:36 ` [MODERATED] [PATCH 1/1 v2] " Jiri Kosina
2018-06-29  8:38   ` [MODERATED] " Borislav Petkov
2018-06-29 15:43   ` Thomas Gleixner
2018-06-29 15:46     ` Thomas Gleixner
2018-06-29 16:48   ` [MODERATED] " Josh Poimboeuf
2018-06-29 16:49     ` Josh Poimboeuf
2018-06-29 19:47     ` Thomas Gleixner
2018-06-29 19:54       ` [MODERATED] " Josh Poimboeuf
2018-06-29 21:26         ` Jiri Kosina
2018-06-29 21:28           ` Jiri Kosina
2018-06-29 22:05             ` Andi Kleen
2018-06-29 22:17               ` Jiri Kosina
2018-06-29 23:21                 ` Andi Kleen
2018-06-29 23:33                   ` Jiri Kosina
2018-06-29 23:37                     ` Jiri Kosina
2018-06-29 23:44                     ` Andi Kleen
2018-06-30  0:02                       ` Jiri Kosina
2018-06-30  0:41                         ` Andi Kleen
2018-06-30  0:50                           ` Jiri Kosina
2018-06-30  8:59                           ` Thomas Gleixner
2018-06-30 17:42                             ` [MODERATED] " Linus Torvalds
2018-06-30 19:30                               ` Jiri Kosina
2018-06-30 19:52                                 ` Linus Torvalds
2018-06-30 19:58                                   ` Jiri Kosina
2018-07-02 14:52                                     ` Konrad Rzeszutek Wilk
2018-07-02  8:06                               ` Thomas Gleixner
2018-07-05 20:03                             ` [MODERATED] " Jon Masters
2018-07-05 20:16                               ` Jiri Kosina
2018-07-05 21:29                                 ` Jon Masters
2018-07-05 21:39                                   ` Jiri Kosina
2018-07-05 22:19                                     ` Thomas Gleixner
2018-07-05 23:49                                       ` [MODERATED] " Josh Poimboeuf
2018-07-05 20:25                               ` Linus Torvalds
2018-07-05 20:50                                 ` Thomas Gleixner
2018-07-05 21:21                                   ` [MODERATED] " Jon Masters
2018-07-05 21:24                                     ` Jon Masters
2018-06-30 14:59                           ` Josh Poimboeuf
2018-06-30 23:34                           ` Dave Hansen
2018-07-01  0:06                             ` Linus Torvalds
2018-06-29 21:46           ` Josh Poimboeuf
2018-06-29 21:49           ` Andi Kleen
2018-06-29 21:56             ` Jiri Kosina
2018-06-29 22:05               ` Thomas Gleixner
2018-06-29 22:43               ` [MODERATED] " Luck, Tony
2018-06-30  9:05             ` Thomas Gleixner
2018-06-30 19:48 ` [MODERATED] [PATCH 1/1 v3] " Jiri Kosina
2018-06-30 21:31   ` [MODERATED] " Josh Poimboeuf
2018-06-30 21:35     ` Linus Torvalds
2018-06-30 21:43     ` Jiri Kosina
2018-06-30 22:22 ` [MODERATED] [PATCH 1/1 v4] " Jiri Kosina
2018-07-02 14:51   ` [MODERATED] " Konrad Rzeszutek Wilk
2018-07-02 15:00     ` Jiri Kosina
2018-07-02 15:14       ` Thomas Gleixner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.