Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f7a119a7 authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Greg Kroah-Hartman
Browse files

x86/speculation/mds: Add mds=full,nosmt cmdline option



commit d71eb0ce109a124b0fa714832823b9452f2762cf upstream

Add the mds=full,nosmt cmdline option.  This is like mds=full, but with
SMT disabled if the CPU is vulnerable.

Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarTyler Hicks <tyhicks@canonical.com>
Acked-by: default avatarJiri Kosina <jkosina@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cfaa3d76
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -260,6 +260,9 @@ time with the option "mds=". The valid arguments for this option are:

		It does not automatically disable SMT.

  full,nosmt	The same as mds=full, with SMT disabled on vulnerable
		CPUs.  This is the complete mitigation.

  off		Disables MDS mitigations completely.

  ============  =============================================================
+4 −2
Original line number Diff line number Diff line
@@ -2336,6 +2336,8 @@
			options are:

			full       - Enable MDS mitigation on vulnerable CPUs
			full,nosmt - Enable MDS mitigation and disable
				     SMT on vulnerable CPUs
			off        - Unconditionally disable MDS mitigation

			Not specifying this option is equivalent to
+10 −0
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ static void x86_amd_ssb_disable(void)

/* Default mitigation for L1TF-affected CPUs */
static enum mds_mitigations mds_mitigation __ro_after_init = MDS_MITIGATION_FULL;
static bool mds_nosmt __ro_after_init = false;

static const char * const mds_strings[] = {
	[MDS_MITIGATION_OFF]	= "Vulnerable",
@@ -236,8 +237,13 @@ static void __init mds_select_mitigation(void)
	if (mds_mitigation == MDS_MITIGATION_FULL) {
		if (!boot_cpu_has(X86_FEATURE_MD_CLEAR))
			mds_mitigation = MDS_MITIGATION_VMWERV;

		static_branch_enable(&mds_user_clear);

		if (mds_nosmt && !boot_cpu_has(X86_BUG_MSBDS_ONLY))
			cpu_smt_disable(false);
	}

	pr_info("%s\n", mds_strings[mds_mitigation]);
}

@@ -253,6 +259,10 @@ static int __init mds_cmdline(char *str)
		mds_mitigation = MDS_MITIGATION_OFF;
	else if (!strcmp(str, "full"))
		mds_mitigation = MDS_MITIGATION_FULL;
	else if (!strcmp(str, "full,nosmt")) {
		mds_mitigation = MDS_MITIGATION_FULL;
		mds_nosmt = true;
	}

	return 0;
}