All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for David Woodhouse <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, karahmed@amazon.de, hpa@zytor.com,
	dwmw@amazon.co.uk, mingo@kernel.org, tglx@linutronix.de
Subject: [tip:x86/pti] x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support
Date: Fri, 26 Jan 2018 07:02:15 -0800	[thread overview]
Message-ID: <tip-20ffa1caecca4db8f79fe665acdeaa5af815a24d@git.kernel.org> (raw)
In-Reply-To: <1516896855-7642-8-git-send-email-dwmw@amazon.co.uk>

Commit-ID:  20ffa1caecca4db8f79fe665acdeaa5af815a24d
Gitweb:     https://git.kernel.org/tip/20ffa1caecca4db8f79fe665acdeaa5af815a24d
Author:     David Woodhouse <dwmw@amazon.co.uk>
AuthorDate: Thu, 25 Jan 2018 16:14:15 +0000
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 26 Jan 2018 15:53:18 +0100

x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support

Expose indirect_branch_prediction_barrier() for use in subsequent patches.

[ tglx: Add IBPB status to spectre_v2 sysfs file ]

Co-developed-by: KarimAllah Ahmed <karahmed@amazon.de>
Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Cc: gnomes@lxorguk.ukuu.org.uk
Cc: ak@linux.intel.com
Cc: ashok.raj@intel.com
Cc: dave.hansen@intel.com
Cc: arjan@linux.intel.com
Cc: torvalds@linux-foundation.org
Cc: peterz@infradead.org
Cc: bp@alien8.de
Cc: pbonzini@redhat.com
Cc: tim.c.chen@linux.intel.com
Cc: gregkh@linux-foundation.org
Link: https://lkml.kernel.org/r/1516896855-7642-8-git-send-email-dwmw@amazon.co.uk

---
 arch/x86/include/asm/cpufeatures.h   |  2 ++
 arch/x86/include/asm/nospec-branch.h | 13 +++++++++++++
 arch/x86/kernel/cpu/bugs.c           | 10 +++++++++-
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
index ae3212f..07934b2 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -210,6 +210,8 @@
 #define X86_FEATURE_MBA			( 7*32+18) /* Memory Bandwidth Allocation */
 #define X86_FEATURE_RSB_CTXSW		( 7*32+19) /* Fill RSB on context switches */
 
+#define X86_FEATURE_IBPB		( 7*32+21) /* Indirect Branch Prediction Barrier enabled*/
+
 /* Virtualization flags: Linux defined, word 8 */
 #define X86_FEATURE_TPR_SHADOW		( 8*32+ 0) /* Intel TPR Shadow */
 #define X86_FEATURE_VNMI		( 8*32+ 1) /* Intel Virtual NMI */
diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
index 4ad4108..34e384c 100644
--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -218,5 +218,18 @@ static inline void vmexit_fill_RSB(void)
 #endif
 }
 
+static inline void indirect_branch_prediction_barrier(void)
+{
+	asm volatile(ALTERNATIVE("",
+				 "movl %[msr], %%ecx\n\t"
+				 "movl %[val], %%eax\n\t"
+				 "movl $0, %%edx\n\t"
+				 "wrmsr",
+				 X86_FEATURE_IBPB)
+		     : : [msr] "i" (MSR_IA32_PRED_CMD),
+			 [val] "i" (PRED_CMD_IBPB)
+		     : "eax", "ecx", "edx", "memory");
+}
+
 #endif /* __ASSEMBLY__ */
 #endif /* __NOSPEC_BRANCH_H__ */
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 4a39d7b..bac7a35 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -263,6 +263,13 @@ retpoline_auto:
 		setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
 		pr_info("Filling RSB on context switch\n");
 	}
+
+	/* Initialize Indirect Branch Prediction Barrier if supported */
+	if (boot_cpu_has(X86_FEATURE_SPEC_CTRL) ||
+	    boot_cpu_has(X86_FEATURE_AMD_PRED_CMD)) {
+		setup_force_cpu_cap(X86_FEATURE_IBPB);
+		pr_info("Enabling Indirect Branch Prediction Barrier\n");
+	}
 }
 
 #undef pr_fmt
@@ -292,7 +299,8 @@ ssize_t cpu_show_spectre_v2(struct device *dev,
 	if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
 		return sprintf(buf, "Not affected\n");
 
-	return sprintf(buf, "%s%s\n", spectre_v2_strings[spectre_v2_enabled],
+	return sprintf(buf, "%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
+		       boot_cpu_has(X86_FEATURE_IBPB) ? ", IPBP" : "",
 		       spectre_v2_bad_module ? " - vulnerable module loaded" : "");
 }
 #endif

  reply	other threads:[~2018-01-26 15:03 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-25 16:14 [PATCH v5 0/7] Basic Speculation Control feature support David Woodhouse
2018-01-25 16:14 ` [PATCH v5 1/7] x86/cpufeatures: Add CPUID_7_EDX CPUID leaf David Woodhouse
2018-01-26 14:59   ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-01-25 16:14 ` [PATCH v5 2/7] x86/cpufeatures: Add Intel feature bits for Speculation Control David Woodhouse
2018-01-26 15:00   ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-01-25 16:14 ` [PATCH v5 3/7] x86/cpufeatures: Add AMD " David Woodhouse
2018-01-25 21:30   ` Borislav Petkov
2018-01-25 21:37     ` Thomas Gleixner
2018-01-25 21:41     ` Borislav Petkov
2018-01-26 15:00   ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-01-26 18:41     ` [PATCH] x86/cpufeatures: Cleanup AMD speculation feature bits Borislav Petkov
2018-01-26 18:45       ` David Woodhouse
2018-01-26 18:49         ` Borislav Petkov
2018-01-26 21:06           ` Tom Lendacky
2018-01-26 21:52             ` Borislav Petkov
2018-01-26 21:59               ` David Woodhouse
2018-01-26 22:10                 ` Borislav Petkov
2018-01-26 23:14                   ` Tom Lendacky
2018-01-27  8:49                     ` David Woodhouse
2018-01-27  9:27                     ` David Woodhouse
2018-01-27  9:37                       ` Borislav Petkov
2018-01-27 10:32                         ` David Woodhouse
2018-01-27 13:18                           ` Borislav Petkov
2018-01-25 16:14 ` [PATCH v5 4/7] x86/msr: Add definitions for new speculation control MSRs David Woodhouse
2018-01-26 15:00   ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-01-25 16:14 ` [PATCH v5 5/7] x86/pti: Do not enable PTI on processors which are not vulnerable to Meltdown David Woodhouse
2018-01-25 18:10   ` Dave Hansen
2018-01-25 19:53     ` Dave Hansen
2018-01-25 22:00   ` Borislav Petkov
2018-01-26 15:01   ` [tip:x86/pti] x86/pti: Do not enable PTI on CPUs " tip-bot for David Woodhouse
2018-01-25 16:14 ` [PATCH v5 6/7] x86/cpufeature: Blacklist SPEC_CTRL/PRED_CMD on early Spectre v2 microcodes David Woodhouse
2018-01-26 15:01   ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-01-25 16:14 ` [PATCH v5 7/7] x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support David Woodhouse
2018-01-26 15:02   ` tip-bot for David Woodhouse [this message]
2018-01-26 16:18     ` [tip:x86/pti] " David Woodhouse
2018-01-26 21:36   ` [PATCH v5 7/7] " Tim Chen

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=tip-20ffa1caecca4db8f79fe665acdeaa5af815a24d@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=dwmw@amazon.co.uk \
    --cc=hpa@zytor.com \
    --cc=karahmed@amazon.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@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.