From: Thomas Gleixner <tglx@linutronix.de>
To: speck@linutronix.de
Subject: [patch V7 10/15] SBB 10
Date: Sun, 29 Apr 2018 21:30:55 +0200 [thread overview]
Message-ID: <20180429193938.293499564@linutronix.de> (raw)
In-Reply-To: 20180429193045.711908246@linutronix.de
AMD does not need the Speculative Store Bypass mitigation to be enabled.
But the parameters for this are already available and can be done via MSR
C001_1020. Each family uses a different bit in that MSR for this.
[ tglx: Expose the bit mask via a variable and move the actual MSR fiddling
into the bugs code as that's the right thing to do and to prepare
for dynamic enable/disable ]
Suggested-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
v2: New patch
v3: Use the right CPU features
Move the whole logic in early_init_amd and init_amd
v5: Set X86_FEATURE_RDS on Fam16->17h
Change title to have 'bugs' in it.
---
arch/x86/include/asm/cpufeatures.h | 1 +
arch/x86/include/asm/nospec-branch.h | 4 ++++
arch/x86/kernel/cpu/amd.c | 21 +++++++++++++++++++++
arch/x86/kernel/cpu/bugs.c | 27 ++++++++++++++++++++++++++-
4 files changed, 52 insertions(+), 1 deletion(-)
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -215,6 +215,7 @@
#define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */
#define X86_FEATURE_USE_IBRS_FW ( 7*32+22) /* "" Use IBRS during runtime firmware calls */
#define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23) /* "" Disable Speculative Store Bypass. */
+#define X86_FEATURE_AMD_RDS (7*32+24) /* "" AMD RDS implementation */
/* Virtualization flags: Linux defined, word 8 */
#define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -244,6 +244,10 @@ enum ssb_mitigation {
SPEC_STORE_BYPASS_DISABLE,
};
+/* AMD specific Speculative Store Bypass MSR data */
+extern u64 x86_amd_ls_cfg_base;
+extern u64 x86_amd_ls_cfg_rds_mask;
+
extern char __indirect_thunk_start[];
extern char __indirect_thunk_end[];
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -10,6 +10,7 @@
#include <asm/processor.h>
#include <asm/apic.h>
#include <asm/cpu.h>
+#include <asm/nospec-branch.h>
#include <asm/smp.h>
#include <asm/pci-direct.h>
#include <asm/delay.h>
@@ -673,6 +674,26 @@ static void early_init_amd(struct cpuinf
set_cpu_bug(c, X86_BUG_AMD_E400);
early_detect_mem_encrypt(c);
+
+ if (c->x86 >= 0x15 && c->x86 <= 0x17) {
+ unsigned int bit;
+
+ switch (c->x86) {
+ case 0x15: bit = 54; break;
+ case 0x16: bit = 33; break;
+ case 0x17: bit = 10; break;
+ default: return;
+ }
+ /*
+ * Try to cache the base value so further operations can
+ * avoid RMW. If that faults, do not enable RDS.
+ */
+ if (!rdmsrl_safe(MSR_AMD64_LS_CFG, &x86_amd_ls_cfg_base)) {
+ set_cpu_cap(c, X86_FEATURE_RDS);
+ set_cpu_cap(c, X86_FEATURE_AMD_RDS);
+ x86_amd_ls_cfg_rds_mask = (1ULL << bit);
+ }
+ }
}
static void init_amd_k8(struct cpuinfo_x86 *c)
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -41,6 +41,13 @@ static u64 __ro_after_init x86_spec_ctrl
*/
static u64 __ro_after_init x86_spec_ctrl_mask = ~(SPEC_CTRL_IBRS);
+/*
+ * AMD specific MSR info for Store Bypass control. x86_amd_ls_cfg_rds_mask
+ * is initialized in identify_boot_cpu().
+ */
+u64 __ro_after_init x86_amd_ls_cfg_base;
+u64 __ro_after_init x86_amd_ls_cfg_rds_mask;
+
void __init check_bugs(void)
{
identify_boot_cpu();
@@ -52,7 +59,8 @@ void __init check_bugs(void)
/*
* Read the SPEC_CTRL MSR to account for reserved bits which may
- * have unknown values.
+ * have unknown values. AMD64_LS_CFG msr is cached in the early AMD
+ * init code as it is not enumerated and depends on the family.
*/
if (boot_cpu_has(X86_FEATURE_IBRS))
rdmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base);
@@ -154,6 +162,14 @@ void x86_restore_host_spec_ctrl(u64 gues
}
EXPORT_SYMBOL_GPL(x86_restore_host_spec_ctrl);
+static void x86_amd_rds_enable(void)
+{
+ u64 msrval = x86_amd_ls_cfg_base | x86_amd_ls_cfg_rds_bit);
+
+ if (boot_cpu_has(X86_FEATURE_AMD_RDS))
+ wrmsrl(MSR_AMD64_LS_CFG, msrval);
+}
+
#ifdef RETPOLINE
static bool spectre_v2_bad_module;
@@ -443,6 +459,11 @@ static enum ssb_mitigation_cmd __init __
switch (cmd) {
case SPEC_STORE_BYPASS_CMD_AUTO:
+ /*
+ * AMD platforms by default don't need SSB mitigation.
+ */
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
+ break;
case SPEC_STORE_BYPASS_CMD_ON:
mode = SPEC_STORE_BYPASS_DISABLE;
break;
@@ -469,6 +490,7 @@ static enum ssb_mitigation_cmd __init __
x86_set_spec_ctrl(SPEC_CTRL_RDS);
break;
case X86_VENDOR_AMD:
+ x86_amd_rds_enable();
break;
}
}
@@ -490,6 +512,9 @@ void x86_setup_ap_spec_ctrl(void)
{
if (boot_cpu_has(X86_FEATURE_IBRS))
x86_set_spec_ctrl(x86_spec_ctrl_base & ~x86_spec_ctrl_mask);
+
+ if (ssb_mode == SPEC_STORE_BYPASS_DISABLE)
+ x86_amd_rds_enable();
}
#ifdef CONFIG_SYSFS
next prev parent reply other threads:[~2018-04-29 20:02 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-29 19:30 [patch V7 00/15] SBB 0 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 01/15] SBB 1 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 02/15] SBB 2 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 03/15] SBB 3 Thomas Gleixner
2018-04-29 23:31 ` [MODERATED] " Linus Torvalds
2018-04-30 2:50 ` Konrad Rzeszutek Wilk
2018-04-30 7:09 ` David Woodhouse
2018-04-29 19:30 ` [patch V7 04/15] SBB 4 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 05/15] SBB 5 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 06/15] SBB 6 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 07/15] SBB 7 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 08/15] SBB 8 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 09/15] SBB 9 Thomas Gleixner
2018-04-29 19:30 ` Thomas Gleixner [this message]
2018-04-30 0:16 ` [MODERATED] Re: [patch V7 10/15] SBB 10 Konrad Rzeszutek Wilk
2018-04-30 7:49 ` Thomas Gleixner
2018-04-29 19:30 ` [patch V7 11/15] SBB 11 Thomas Gleixner
2018-04-29 19:30 ` [patch V7 12/15] SBB 12 Thomas Gleixner
2018-04-30 1:33 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-29 19:30 ` [patch V7 13/15] SBB 13 Thomas Gleixner
2018-04-30 1:48 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-30 2:39 ` Konrad Rzeszutek Wilk
2018-04-30 3:17 ` Jon Masters
2018-04-30 8:35 ` Thomas Gleixner
2018-04-30 2:20 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-30 2:36 ` Konrad Rzeszutek Wilk
2018-04-30 17:28 ` Konrad Rzeszutek Wilk
2018-04-29 19:30 ` [patch V7 14/15] SBB 14 Thomas Gleixner
2018-04-30 2:14 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-30 5:57 ` Thomas Gleixner
2018-04-30 15:49 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-29 19:31 ` [patch V7 15/15] SBB 15 Thomas Gleixner
2018-04-30 2:32 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-30 15:56 ` Konrad Rzeszutek Wilk
2018-04-30 16:07 ` Thomas Gleixner
2018-04-30 19:30 ` [MODERATED] " Tim Chen
2018-04-30 19:36 ` Thomas Gleixner
2018-04-30 20:12 ` [MODERATED] " Tim Chen
2018-04-30 20:20 ` Konrad Rzeszutek Wilk
2018-04-30 20:44 ` Tim Chen
2018-04-30 20:28 ` Thomas Gleixner
2018-04-30 20:09 ` [MODERATED] " Konrad Rzeszutek Wilk
2018-04-29 20:14 ` [patch V7 00/15] SBB 0 Thomas Gleixner
2018-04-29 20:35 ` [MODERATED] " Borislav Petkov
2018-04-29 20:46 ` Konrad Rzeszutek Wilk
2018-04-29 20:57 ` Thomas Gleixner
2018-04-29 21:40 ` [MODERATED] " Borislav Petkov
2018-04-29 20:55 ` Thomas Gleixner
2018-04-29 22:05 ` Thomas Gleixner
2018-04-30 0:06 ` [MODERATED] " Jon Masters
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180429193938.293499564@linutronix.de \
--to=tglx@linutronix.de \
--cc=speck@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.