From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AH8x2251HeiVAWSDUgphwQK/H8Ha2cElSxkVkDODg4LqGz8wGeulVVhXE6norFDI8xU1VzxfVjFo ARC-Seal: i=1; a=rsa-sha256; t=1517070294; cv=none; d=google.com; s=arc-20160816; b=ddKjhVLwfoYCgV5MWBTlGSzbz064XyUNJjUa1UJXpcXqi1fizmu0vw1zcQrluJnt65 pmQ3p0adgG/FkihGMXRxfN43nXbUSlfiNYXocMeYcDn5MX+P4NY9FpP2a6cyD6Imrk7C 54/EXS0r3x0cpn5iZWWFa18d4T3bgA55rSLOvlU6yDCLA7mMc0VFsygK4fyR+1rGcMQ0 DITBUIMHaQoadDsAM0uSwbWlPaPv4JJtql1dftz/In1z5sQV6on7+exFuXXcjA4xDFxO 52JUJKHX2j1qYDgGirEyYGybPVAiRAkny9Q2pgE8zeKCA92oO5l+ylWzzVNqTEG5iWAX HFsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-authentication-results; bh=OXq3lezgru394cm4GIEGjDWl+PBWdbKO5HU163/eal0=; b=m7tiF/3Z58izSmC6TLeRhThVHtiFNmqsTCXEfptv3+8+Yl6SeEk0vYkZjBjlrbhStr gYd8Ouk0eagjQqVdOXx03ideCOX2VFJ3im76cok3rzcWj4/GvtRjJ3v8myuTfJjvgbmO /OBUgatFRvCnAFtSBHiEryxuRJXzrt8lYeJskwdjVrBwVz/xZ38nOs3w6Vj2UvLUDS57 E9sdSAr9vSw3XXiQ+gzS7/y3TPnZy0Jb65S/TZgQjsHONnhSX1aC/tO6uQIfA6zT61pu 2dkdVTom3ux9IMgtwA+tA1LoI4lPCRi2m8vU28rW2XqXAwRal8bwJeUP5+U8JtznCyOF JRrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.co.uk header.s=amazon201209 header.b=cOK/EX19; spf=pass (google.com: domain of prvs=558ede6c8=dwmw@amazon.com designates 207.171.184.29 as permitted sender) smtp.mailfrom=prvs=558ede6c8=dwmw@amazon.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.co.uk Authentication-Results: mx.google.com; dkim=pass header.i=@amazon.co.uk header.s=amazon201209 header.b=cOK/EX19; spf=pass (google.com: domain of prvs=558ede6c8=dwmw@amazon.com designates 207.171.184.29 as permitted sender) smtp.mailfrom=prvs=558ede6c8=dwmw@amazon.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.co.uk X-IronPort-AV: E=Sophos;i="5.46,422,1511827200"; d="scan'208";a="590437680" From: David Woodhouse To: arjan@linux.intel.com, tglx@linutronix.de, karahmed@amazon.de, x86@kernel.org, linux-kernel@vger.kernel.org, tim.c.chen@linux.intel.com, bp@alien8.de, peterz@infradead.org, pbonzini@redhat.com, ak@linux.intel.com, torvalds@linux-foundation.org, gregkh@linux-foundation.org, dave.hansen@intel.com Subject: [PATCH 3/3] x86/speculation: Simplify indirect_branch_prediction_barrier() Date: Sat, 27 Jan 2018 16:24:34 +0000 Message-Id: <1517070274-12128-4-git-send-email-dwmw@amazon.co.uk> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517070274-12128-1-git-send-email-dwmw@amazon.co.uk> References: <1517070274-12128-1-git-send-email-dwmw@amazon.co.uk> X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1590763501209743477?= X-GMAIL-MSGID: =?utf-8?q?1590763501209743477?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: From: Borislav Petkov Make it all a function which does the WRMSR instead of having a hairy inline asm. [dwmw2: export it, fix CONFIG_RETPOLINE issues] Signed-off-by: Borislav Petkov Signed-off-by: David Woodhouse --- arch/x86/include/asm/nospec-branch.h | 13 ++++--------- arch/x86/include/asm/processor.h | 3 +++ arch/x86/kernel/cpu/bugs.c | 6 ++++++ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h index df4ececa..d15d471 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -164,15 +164,10 @@ static inline void vmexit_fill_RSB(void) 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_USE_IBPB) - : : [msr] "i" (MSR_IA32_PRED_CMD), - [val] "i" (PRED_CMD_IBPB) - : "eax", "ecx", "edx", "memory"); + alternative_input("", + "call __ibp_barrier", + X86_FEATURE_USE_IBPB, + ASM_NO_INPUT_CLOBBER("eax", "ecx", "edx", "memory")); } #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 9c18da6..881ca3b 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -970,4 +970,7 @@ bool xen_set_default_idle(void); void stop_this_cpu(void *dummy); void df_debug(struct pt_regs *regs, long error_code); + +void __ibp_barrier(void); + #endif /* _ASM_X86_PROCESSOR_H */ diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index 0c6dd43..dd99808 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -303,3 +303,9 @@ ssize_t cpu_show_spectre_v2(struct device *dev, spectre_v2_bad_module ? " - vulnerable module loaded" : ""); } #endif + +void __ibp_barrier(void) +{ + __wrmsr(MSR_IA32_PRED_CMD, PRED_CMD_IBPB, 0); +} +EXPORT_SYMBOL_GPL(__ibp_barrier); -- 2.7.4