Skip to content

Commit

Permalink
x86/speculation/mds: Add mds=full,nosmt cmdline option
Browse files Browse the repository at this point in the history
Add the mds=full,nosmt cmdline option.  This is like mds=full, but with
SMT disabled if the CPU is vulnerable.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Tyler Hicks <tyhicks@canonical.com>
Acked-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Josh Poimboeuf authored and Thomas Gleixner committed Apr 2, 2019
1 parent 5999bbe commit d71eb0c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
3 changes: 3 additions & 0 deletions Documentation/admin-guide/hw-vuln/mds.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.

============ =============================================================
Expand Down
6 changes: 4 additions & 2 deletions Documentation/admin-guide/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2372,8 +2372,10 @@
This parameter controls the MDS mitigation. The
options are:

full - Enable MDS mitigation on vulnerable CPUs
off - Unconditionally disable MDS mitigation
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
mds=full.
Expand Down
10 changes: 10 additions & 0 deletions arch/x86/kernel/cpu/bugs.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,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",
Expand All @@ -238,8 +239,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]);
}

Expand All @@ -255,6 +261,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;
}
Expand Down

0 comments on commit d71eb0c

Please sign in to comment.