From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Linus Torvalds <torvalds@linuxfoundation.org>,
x86@kernel.org, Peter Zijlstra <peterz@infradead.org>,
Borislav Petkov <bp@alien8.de>,
David Woodhouse <dwmw@amazon.co.uk>,
Tim Chen <tim.c.chen@linux.intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Andi Kleen <ak@linux.intel.com>,
Greg KH <gregkh@linuxfoundation.org>,
Dave Hansen <dave.hansen@intel.com>,
Andy Lutomirski <luto@kernel.org>,
Arjan Van De Ven <arjan.van.de.ven@intel.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: [patch RFC 4/5] x86/cpufeatures: Detect Speculation control feature
Date: Wed, 10 Jan 2018 02:06:56 +0100 [thread overview]
Message-ID: <20180110011350.759392067@linutronix.de> (raw)
In-Reply-To: <20180110010652.404145126@linutronix.de>
[-- Attachment #1: x86-feature--Detect_the_x86_IBRS_feature_to_control_Speculation.patch --]
[-- Type: text/plain, Size: 3504 bytes --]
From: Tim Chen <tim.c.chen@linux.intel.com>
CPUs can expose a MSR to control speculation. The initial function of this
MSR is to control Indirect Branch Speculation, which is required to
mitigate the Spectre_V2 attack on certain CPU generations.
If CPUID(7).RDX[26] is set then MSR_IA32_SPEC_CTRL (0x48) is available and
bit 0 of that MSR controls whether Indirect Branch Speculation is
restricted or not. The control bit is named IBRS (Indirect Branch
Restricted Speculation). The IBSR bit can be unconditionally set to 1
without clearing it before.
If IBRS is set, near returns and near indirect jumps/calls will not allow
their predicted target address to be controlled by code that executed in a
less privileged prediction mode before the IBRS mode was last written with
a value of 1 or on another logical processor so long as all Return Stack
Buffer (RSB) entries from the previous less privileged prediction mode are
overwritten.
Thus a near indirect jump/call/return may be affected by code in a less
privileged prediction mode that executed AFTER IBRS mode was last written
with a value of 1.
Code executed by a sibling logical processor cannot control indirect
jump/call/return predicted target when IBRS is set
IBRS is not required in order to isolate branch predictions for SMM or SGX
enclaves.
Enabling IBRS can cause a measurable and depending on the workload
significant CPU performance penalty.
[ tglx: Steam blastered changelog ]
Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: David Woodhouse <dwmw@amazon.co.uk>
---
arch/x86/include/asm/cpufeatures.h | 1 +
arch/x86/include/asm/msr-index.h | 4 ++++
arch/x86/kernel/cpu/scattered.c | 1 +
3 files changed, 6 insertions(+)
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -211,6 +211,7 @@
#define X86_FEATURE_AVX512_4FMAPS ( 7*32+17) /* AVX-512 Multiply Accumulation Single precision */
#define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */
+#define X86_FEATURE_SPEC_CTRL ( 7*32+19) /* Speculation Control */
/* Virtualization flags: Linux defined, word 8 */
#define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -42,6 +42,10 @@
#define MSR_PPIN_CTL 0x0000004e
#define MSR_PPIN 0x0000004f
+#define MSR_IA32_SPEC_CTRL 0x00000048
+#define SPEC_CTRL_DISABLE_IBRS (0UL << 0)
+#define SPEC_CTRL_ENABLE_IBRS (1UL << 0)
+
#define MSR_IA32_PERFCTR0 0x000000c1
#define MSR_IA32_PERFCTR1 0x000000c2
#define MSR_FSB_FREQ 0x000000cd
--- a/arch/x86/kernel/cpu/scattered.c
+++ b/arch/x86/kernel/cpu/scattered.c
@@ -24,6 +24,7 @@ static const struct cpuid_bit cpuid_bits
{ X86_FEATURE_INTEL_PT, CPUID_EBX, 25, 0x00000007, 0 },
{ X86_FEATURE_AVX512_4VNNIW, CPUID_EDX, 2, 0x00000007, 0 },
{ X86_FEATURE_AVX512_4FMAPS, CPUID_EDX, 3, 0x00000007, 0 },
+ { X86_FEATURE_SPEC_CTRL, CPUID_EDX, 26, 0x00000007, 0 },
{ X86_FEATURE_CAT_L3, CPUID_EBX, 1, 0x00000010, 0 },
{ X86_FEATURE_CAT_L2, CPUID_EBX, 2, 0x00000010, 0 },
{ X86_FEATURE_CDP_L3, CPUID_ECX, 2, 0x00000010, 1 },
next prev parent reply other threads:[~2018-01-10 1:23 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 1:06 [patch RFC 0/5] x86/spectre_v2: Initial integration of IBRS into the spectre_v2 mechanics Thomas Gleixner
2018-01-10 1:06 ` [patch RFC 1/5] x86/CPU: Sync CPU feature flags late Thomas Gleixner
2018-01-10 1:37 ` Dave Hansen
2018-01-10 1:39 ` Van De Ven, Arjan
2018-01-10 1:47 ` Thomas Gleixner
2018-01-10 2:57 ` Andy Lutomirski
2018-01-10 11:02 ` Thomas Gleixner
2018-01-10 1:44 ` Thomas Gleixner
2018-01-10 6:20 ` Ingo Molnar
2018-01-10 11:33 ` Borislav Petkov
2018-01-10 12:38 ` Thomas Gleixner
2018-01-10 1:06 ` [patch RFC 2/5] x86/spectre: Simplify spectre code a bit Thomas Gleixner
2018-01-10 6:22 ` Ingo Molnar
2018-01-10 1:06 ` [patch RFC 3/5] x86/spectre: Prepare for IBRS selection Thomas Gleixner
2018-01-10 1:51 ` Dave Hansen
2018-01-10 1:06 ` Thomas Gleixner [this message]
2018-01-10 6:32 ` [patch RFC 4/5] x86/cpufeatures: Detect Speculation control feature Ingo Molnar
2018-01-10 11:06 ` Thomas Gleixner
2018-01-10 1:06 ` [patch RFC 5/5] x86/speculation: Add basic speculation control code Thomas Gleixner
2018-01-10 2:02 ` Dave Hansen
2018-01-10 4:11 ` Justin Forbes
2018-01-10 9:22 ` Peter Zijlstra
2018-01-10 9:27 ` David Woodhouse
2018-01-10 10:03 ` Peter Zijlstra
2018-01-10 11:22 ` David Woodhouse
2018-01-10 11:41 ` Thomas Gleixner
2018-01-10 11:45 ` Peter Zijlstra
2018-01-10 11:54 ` Andrea Arcangeli
2018-01-10 11:58 ` David Woodhouse
2018-01-10 12:01 ` Andrea Arcangeli
2018-01-10 12:07 ` Andrea Arcangeli
2018-01-10 12:12 ` David Woodhouse
2018-01-10 12:20 ` Andrea Arcangeli
2018-01-10 12:27 ` Andrea Arcangeli
2018-01-10 13:42 ` Van De Ven, Arjan
2018-01-10 12:09 ` David Woodhouse
2018-01-10 12:17 ` Andrea Arcangeli
2018-01-10 12:29 ` David Woodhouse
2018-01-10 12:41 ` Andrea Arcangeli
2018-01-10 12:47 ` Jiri Kosina
2018-01-10 12:51 ` David Woodhouse
2018-01-10 13:02 ` Andrea Arcangeli
2018-01-10 13:05 ` Andrea Arcangeli
2018-01-10 13:10 ` Andrea Arcangeli
2018-01-10 13:12 ` Andrea Arcangeli
2018-01-10 12:57 ` Andrea Arcangeli
2018-01-10 13:07 ` David Woodhouse
2018-01-10 13:45 ` Van De Ven, Arjan
2018-01-10 13:52 ` Andrea Arcangeli
2018-01-10 13:53 ` Van De Ven, Arjan
2018-01-10 21:35 ` Tim Chen
2018-01-10 22:13 ` Andrea Arcangeli
2018-01-10 13:46 ` Thomas Gleixner
2018-01-10 13:51 ` Van De Ven, Arjan
2018-01-10 13:53 ` Thomas Gleixner
2018-01-10 13:58 ` David Woodhouse
2018-01-10 14:10 ` Andrea Arcangeli
2018-01-10 14:14 ` Van De Ven, Arjan
2018-01-10 14:59 ` Dave Hansen
2018-01-10 15:13 ` Andrea Arcangeli
2018-01-10 15:24 ` David Woodhouse
2018-01-10 15:47 ` Andrea Arcangeli
2018-01-10 15:56 ` David Woodhouse
2018-01-10 13:10 ` Jiri Kosina
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=20180110011350.759392067@linutronix.de \
--to=tglx@linutronix.de \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=arjan.van.de.ven@intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@intel.com \
--cc=dwmw@amazon.co.uk \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=peterz@infradead.org \
--cc=tim.c.chen@linux.intel.com \
--cc=torvalds@linux-foundation.org \
--cc=torvalds@linuxfoundation.org \
--cc=x86@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome