| From d72f4e29e6d84b7ec02ae93088aa459ac70e733b Mon Sep 17 00:00:00 2001 |
| From: Ingo Molnar <mingo@kernel.org> |
| Date: Wed, 21 Feb 2018 09:20:37 +0100 |
| Subject: x86/speculation: Move firmware_restrict_branch_speculation_*() from C to CPP |
| |
| From: Ingo Molnar <mingo@kernel.org> |
| |
| commit d72f4e29e6d84b7ec02ae93088aa459ac70e733b upstream. |
| |
| firmware_restrict_branch_speculation_*() recently started using |
| preempt_enable()/disable(), but those are relatively high level |
| primitives and cause build failures on some 32-bit builds. |
| |
| Since we want to keep <asm/nospec-branch.h> low level, convert |
| them to macros to avoid header hell... |
| |
| Cc: David Woodhouse <dwmw@amazon.co.uk> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: arjan.van.de.ven@intel.com |
| Cc: bp@alien8.de |
| Cc: dave.hansen@intel.com |
| Cc: jmattson@google.com |
| Cc: karahmed@amazon.de |
| Cc: kvm@vger.kernel.org |
| Cc: pbonzini@redhat.com |
| Cc: rkrcmar@redhat.com |
| Cc: linux-kernel@vger.kernel.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/include/asm/nospec-branch.h | 26 ++++++++++++++------------ |
| 1 file changed, 14 insertions(+), 12 deletions(-) |
| |
| --- a/arch/x86/include/asm/nospec-branch.h |
| +++ b/arch/x86/include/asm/nospec-branch.h |
| @@ -257,20 +257,22 @@ static inline void indirect_branch_predi |
| /* |
| * With retpoline, we must use IBRS to restrict branch prediction |
| * before calling into firmware. |
| + * |
| + * (Implemented as CPP macros due to header hell.) |
| */ |
| -static inline void firmware_restrict_branch_speculation_start(void) |
| -{ |
| - preempt_disable(); |
| - alternative_msr_write(MSR_IA32_SPEC_CTRL, SPEC_CTRL_IBRS, |
| - X86_FEATURE_USE_IBRS_FW); |
| -} |
| +#define firmware_restrict_branch_speculation_start() \ |
| +do { \ |
| + preempt_disable(); \ |
| + alternative_msr_write(MSR_IA32_SPEC_CTRL, SPEC_CTRL_IBRS, \ |
| + X86_FEATURE_USE_IBRS_FW); \ |
| +} while (0) |
| |
| -static inline void firmware_restrict_branch_speculation_end(void) |
| -{ |
| - alternative_msr_write(MSR_IA32_SPEC_CTRL, 0, |
| - X86_FEATURE_USE_IBRS_FW); |
| - preempt_enable(); |
| -} |
| +#define firmware_restrict_branch_speculation_end() \ |
| +do { \ |
| + alternative_msr_write(MSR_IA32_SPEC_CTRL, 0, \ |
| + X86_FEATURE_USE_IBRS_FW); \ |
| + preempt_enable(); \ |
| +} while (0) |
| |
| #endif /* __ASSEMBLY__ */ |
| |