Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4500532ybz; Tue, 28 Apr 2020 12:24:38 -0700 (PDT) X-Google-Smtp-Source: APiQypKnj4nye73c6i90wu3McqvrVzkwi9laJICzLOHdaUM1tIrmxITsGPHY1mpdYWHK9CzPUWil X-Received: by 2002:a17:906:784c:: with SMTP id p12mr26751756ejm.346.1588101878436; Tue, 28 Apr 2020 12:24:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588101878; cv=none; d=google.com; s=arc-20160816; b=GVyVLGVUl1hEmBCjq/Ktq5Xn+lc/qAmcuhRPNrgi5X27qBOSEThIGUB5AE7RVwfZGo jv+AAr+z1lQhZujAqkR+OectUxolq3pAXa8bf5OLYkmbnI5qNPW3EHPHff34kHsys/rL encGI9IA+bu3NpJ6CrBL0tlN1lG0FSP5rMTCn0yfqA6Y/KJhwBiNYWkdqym/H9Ds2Far cQlJ/3H6JIoMoNwtoCAf7jeF/V8FHAjptnvVYonbtQImlDR+kVM069DvXAgzvzRMKguF oykkwNUiAU9rgOX+ZO86tKhyWngGK25btdYOAqVo2oVFbT4c0hRlcfLZew88Vi/KXA8l aY6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:subject:cc:to :from:date:user-agent:message-id:dkim-signature; bh=vRZfYVt90Tna9hvcYDWq0QfZ3RiArT47vEsslpQCWE8=; b=pcqE71oWToN3hijpveShii6QajCLHE/lE8S4OJHiPJvI8We6z+0Ci1oT+tnSxT9SA0 CBcLW+Awpglv/dOhy8zvCTp7QPc18Y1XoK6JFKKGOBFWR+7PZaCsUM+DvmtQBpCaJYK2 WST+ZbL6dAxGMkfeaUMU3S9Pe8PdHhVQnlrjIPuQN0NCiTvmeD2xNWPUvv9g6Jvge05b rDSUecsIJvQLY4FJdsQvKMCLB6XynbUQVo09e44MK2NGKRZK/PbXXRtAriJpqe/GJirG 8MKjZ9Al22SgYTL9W8lbpVGrG1jfBX9TzymXGpUrXYFggpQPjR/xXusHohkJzDry4wET VoOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=tOXt9GVi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ca25si2137019edb.389.2020.04.28.12.24.14; Tue, 28 Apr 2020 12:24:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=tOXt9GVi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728943AbgD1TTu (ORCPT + 99 others); Tue, 28 Apr 2020 15:19:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1728490AbgD1TTi (ORCPT ); Tue, 28 Apr 2020 15:19:38 -0400 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DCA2C035493 for ; Tue, 28 Apr 2020 12:19:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-Id:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=vRZfYVt90Tna9hvcYDWq0QfZ3RiArT47vEsslpQCWE8=; b=tOXt9GViT1bU8Lq0ZIKcfcDlmw OybM28XWBaBbIIC4aNUOlUqWWGaUSiTGvOTqIHvOczMlYqHTbapHi+BB6yvMI73WUIkoE3WPX6Qr5 2rCrJgTu3t2NTEkNsUFAy5GZBm+c/ZXuahZu/RlWUJg/VZ3sxBne6llOJxR/bqovHeKjh0n/etcn2 KMXPGCt78b8TjOuhnDUrW+ReiXOuopt+xxpQxB57WEvzF/RoTrtVEWkevIJWk/Cm+jhftr/XTPZJu CH8R7/i0D0DqWCTGmMmmKmBnJkfYNDP5SPcNZFDWfrcBFg3Mwu18ZZBbrFVbUlOrHF/tZipug4hvB Y1N0b7jg==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=noisy.programming.kicks-ass.net) by bombadil.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jTVlS-0006WG-1N; Tue, 28 Apr 2020 19:19:30 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id C59D430796B; Tue, 28 Apr 2020 21:19:26 +0200 (CEST) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id A384423CFDE42; Tue, 28 Apr 2020 21:19:26 +0200 (CEST) Message-Id: <20200428191700.091696925@infradead.org> User-Agent: quilt/0.65 Date: Tue, 28 Apr 2020 21:11:13 +0200 From: Peter Zijlstra To: jpoimboe@redhat.com, alexandre.chartre@oracle.com Cc: linux-kernel@vger.kernel.org, jthierry@redhat.com, tglx@linutronix.de, x86@kernel.org, mbenes@suse.cz, peterz@infradead.org, arnd@arndb.de Subject: [PATCH v2 12/14] x86: Simplify retpoline declaration References: <20200428191101.886208539@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Because of how KSYM works, we need one declaration per line. Seeing how we're going to be doubling the amount of retpoline symbols, simplify the machinery in order to avoid having to copy/paste even more. Cc: arnd@arndb.de Signed-off-by: Peter Zijlstra (Intel) --- arch/x86/include/asm/GEN-for-each-reg.h | 25 ++++++++++++++++++++++ arch/x86/include/asm/asm-prototypes.h | 28 +++++++------------------ arch/x86/lib/retpoline.S | 35 +++++++++++++------------------- 3 files changed, 48 insertions(+), 40 deletions(-) --- /dev/null +++ b/arch/x86/include/asm/GEN-for-each-reg.h @@ -0,0 +1,25 @@ +#ifdef CONFIG_64BIT +GEN(rax) +GEN(rbx) +GEN(rcx) +GEN(rdx) +GEN(rsi) +GEN(rdi) +GEN(rbp) +GEN(r8) +GEN(r9) +GEN(r10) +GEN(r11) +GEN(r12) +GEN(r13) +GEN(r14) +GEN(r15) +#else +GEN(eax) +GEN(ebx) +GEN(ecx) +GEN(edx) +GEN(esi) +GEN(edi) +GEN(ebp) +#endif --- a/arch/x86/include/asm/asm-prototypes.h +++ b/arch/x86/include/asm/asm-prototypes.h @@ -17,24 +17,12 @@ extern void cmpxchg8b_emu(void); #endif #ifdef CONFIG_RETPOLINE -#ifdef CONFIG_X86_32 -#define INDIRECT_THUNK(reg) extern asmlinkage void __x86_indirect_thunk_e ## reg(void); -#else -#define INDIRECT_THUNK(reg) extern asmlinkage void __x86_indirect_thunk_r ## reg(void); -INDIRECT_THUNK(8) -INDIRECT_THUNK(9) -INDIRECT_THUNK(10) -INDIRECT_THUNK(11) -INDIRECT_THUNK(12) -INDIRECT_THUNK(13) -INDIRECT_THUNK(14) -INDIRECT_THUNK(15) -#endif -INDIRECT_THUNK(ax) -INDIRECT_THUNK(bx) -INDIRECT_THUNK(cx) -INDIRECT_THUNK(dx) -INDIRECT_THUNK(si) -INDIRECT_THUNK(di) -INDIRECT_THUNK(bp) + +#define DECL_INDIRECT_THUNK(reg) \ + extern asmlinkage void __x86_indirect_thunk_ ## reg (void); + +#undef GEN +#define GEN(reg) DECL_INDIRECT_THUNK(reg) +#include + #endif /* CONFIG_RETPOLINE */ --- a/arch/x86/lib/retpoline.S +++ b/arch/x86/lib/retpoline.S @@ -24,25 +24,20 @@ SYM_FUNC_END(__x86_indirect_thunk_\reg) * only see one instance of "__x86_indirect_thunk_\reg" rather * than one per register with the correct names. So we do it * the simple and nasty way... + * + * Worse, you can only have a single EXPORT_SYMBOL per line, + * and CPP can't insert newlines, so we have to repeat everything + * at least twice. */ -#define __EXPORT_THUNK(sym) _ASM_NOKPROBE(sym); EXPORT_SYMBOL(sym) -#define EXPORT_THUNK(reg) __EXPORT_THUNK(__x86_indirect_thunk_ ## reg) -#define GENERATE_THUNK(reg) THUNK reg ; EXPORT_THUNK(reg) -GENERATE_THUNK(_ASM_AX) -GENERATE_THUNK(_ASM_BX) -GENERATE_THUNK(_ASM_CX) -GENERATE_THUNK(_ASM_DX) -GENERATE_THUNK(_ASM_SI) -GENERATE_THUNK(_ASM_DI) -GENERATE_THUNK(_ASM_BP) -#ifdef CONFIG_64BIT -GENERATE_THUNK(r8) -GENERATE_THUNK(r9) -GENERATE_THUNK(r10) -GENERATE_THUNK(r11) -GENERATE_THUNK(r12) -GENERATE_THUNK(r13) -GENERATE_THUNK(r14) -GENERATE_THUNK(r15) -#endif +#define __EXPORT_THUNK(sym) _ASM_NOKPROBE(sym); EXPORT_SYMBOL(sym) +#define EXPORT_THUNK(reg) __EXPORT_THUNK(__x86_indirect_thunk_ ## reg) + +#undef GEN +#define GEN(reg) THUNK reg +#include + +#undef GEN +#define GEN(reg) EXPORT_THUNK(reg) +#include +