From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AH8x225xZveT9NjhOhI+GrNbh2pMES1VH5Q8nxE0QHFvBeVWtRMZjc2ihC1em31XhQWxgEW/lBRs ARC-Seal: i=1; a=rsa-sha256; t=1516476486; cv=none; d=google.com; s=arc-20160816; b=EkTZUK0eIjaQEH2GJK3pvqvno5Rsc92sieqfykDsh/Crgogz0iWw89dJw0MwE3mKsh Z+QFpq/aNaCW9SSBeqpKbJCZGA1Tj+E52CqYxnPv9+bYrf4gNthdY7ECFeC3eDlXzxRD sst1eEeXNoiPntAA9uJPl50zQVUd4hil/Pi9cw/SxglVxtwx9clRU5Ue93s5WYpNut+R QgpfKvQsojxYXxtqoF9uUtFS515MpMbWVu8i/wGPhSYqBsS3rME45SF8PVN7uFvownn6 wx4lN0KjIrOb9+c3PXDvrMi/Tak9Pft8jzWX+mLwC71RLzj3wxY0E/kmXYlBquK4iuw/ RjxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=jMp/SGRvhnVT9DgyHNRXG+LXbGpFuMB1ikdhwZ4LfF0=; b=Ibd5Njv4qD/0ZYG3evMfsx1ehKF2k/yBl+lUMFTcvsXC8E8LgbGFFVVqK+eFWgM4Tl TX2A9rsPzt3MtNfYu7bE6lK99zYJiZ5i/nWczPJJiFDU9JEB5HG1bUGAa3sS+9TVCyGt Sc4D6Z5+7WM65ZH6Y9PPflpQATGNaOJ3bQu+4cU5ienh1MDLyxomEGOt+YDnsBRkRHXt TdxfguIr3NBMReFmyQCQ3KnqkJbrsdwx7iDoLLIB8Q37EwKM2larX6a76bxuTxxymilh aktHNohWJcRuoc2JJDmXzVcAMRYxsJSSLDBi/GBxnhSIvKYx1V+xT7cnHfi/HVKTspEZ uo9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.de header.s=amazon201209 header.b=dfXfEBpy; spf=pass (google.com: domain of prvs=551b82ed1=karahmed@amazon.com designates 207.171.184.25 as permitted sender) smtp.mailfrom=prvs=551b82ed1=karahmed@amazon.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.de Authentication-Results: mx.google.com; dkim=pass header.i=@amazon.de header.s=amazon201209 header.b=dfXfEBpy; spf=pass (google.com: domain of prvs=551b82ed1=karahmed@amazon.com designates 207.171.184.25 as permitted sender) smtp.mailfrom=prvs=551b82ed1=karahmed@amazon.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.de X-IronPort-AV: E=Sophos;i="5.46,387,1511827200"; d="scan'208";a="720491812" From: KarimAllah Ahmed To: linux-kernel@vger.kernel.org Cc: KarimAllah Ahmed , Andi Kleen , Andrea Arcangeli , Andy Lutomirski , Arjan van de Ven , Ashok Raj , Asit Mallick , Borislav Petkov , Dan Williams , Dave Hansen , David Woodhouse , Greg Kroah-Hartman , "H . Peter Anvin" , Ingo Molnar , Janakarajan Natarajan , Joerg Roedel , Jun Nakajima , Laura Abbott , Linus Torvalds , Masami Hiramatsu , Paolo Bonzini , Peter Zijlstra , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Thomas Gleixner , Tim Chen , Tom Lendacky , kvm@vger.kernel.org, x86@kernel.org Subject: [RFC 06/10] x86/speculation: Add inlines to control Indirect Branch Speculation Date: Sat, 20 Jan 2018 20:22:57 +0100 Message-Id: <1516476182-5153-7-git-send-email-karahmed@amazon.de> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516476182-5153-1-git-send-email-karahmed@amazon.de> References: <1516476182-5153-1-git-send-email-karahmed@amazon.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1590140848184453648?= X-GMAIL-MSGID: =?utf-8?q?1590140848184453648?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: From: Thomas Gleixner XX: I am utterly unconvinced that having "friendly, self-explanatory" names for the IBRS-frobbing inlines is useful. There be dragons here for anyone who isn't intimately familiar with what's going on, and it's almost better to just call it IBRS, put a reference to the spec, and have a clear "you must be →this← tall to ride." [karahmed: switch to using ALTERNATIVES instead of static_cpu_has] [dwmw2: wrmsr args inside the ALTERNATIVE again, bikeshed naming] Signed-off-by: Thomas Gleixner Signed-off-by: KarimAllah Ahmed Signed-off-by: David Woodhouse --- arch/x86/include/asm/nospec-branch.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h index 8759449..5be3443 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -232,5 +232,41 @@ static inline void indirect_branch_prediction_barrier(void) : "memory"); } +/* + * This also performs a barrier, and setting it again when it was already + * set is NOT a no-op. + */ +static inline void restrict_branch_speculation(void) +{ + unsigned long ax, cx, dx; + + asm volatile(ALTERNATIVE("", + "movl %[msr], %%ecx\n\t" + "movl %[val], %%eax\n\t" + "movl $0, %%edx\n\t" + "wrmsr", + X86_FEATURE_IBRS) + : "=a" (ax), "=c" (cx), "=d" (dx) + : [msr] "i" (MSR_IA32_SPEC_CTRL), + [val] "i" (SPEC_CTRL_IBRS) + : "memory"); +} + +static inline void unrestrict_branch_speculation(void) +{ + unsigned long ax, cx, dx; + + asm volatile(ALTERNATIVE("", + "movl %[msr], %%ecx\n\t" + "movl %[val], %%eax\n\t" + "movl $0, %%edx\n\t" + "wrmsr", + X86_FEATURE_IBRS) + : "=a" (ax), "=c" (cx), "=d" (dx) + : [msr] "i" (MSR_IA32_SPEC_CTRL), + [val] "i" (0) + : "memory"); +} + #endif /* __ASSEMBLY__ */ #endif /* __NOSPEC_BRANCH_H__ */ -- 2.7.4