From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DEDB3C433FE for ; Mon, 16 May 2022 21:56:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241211AbiEPV4N (ORCPT ); Mon, 16 May 2022 17:56:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349471AbiEPV4F (ORCPT ); Mon, 16 May 2022 17:56:05 -0400 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3D2995 for ; Mon, 16 May 2022 14:56:00 -0700 (PDT) Received: from ip5b412258.dynamic.kabel-deutschland.de ([91.65.34.88] helo=diego.localnet) by gloria.sntech.de with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nqigu-0006Sd-3x; Mon, 16 May 2022 23:55:48 +0200 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Nathan Chancellor Cc: Nick Desaulniers , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, patches@lists.linux.dev, Nathan Chancellor , kernel test robot Subject: Re: [PATCH] riscv: Move alternative length validation into subsection Date: Mon, 16 May 2022 23:55:47 +0200 Message-ID: <2827138.e9J7NaK4W3@diego> In-Reply-To: <20220516214520.3252074-1-nathan@kernel.org> References: <20220516214520.3252074-1-nathan@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Am Montag, 16. Mai 2022, 23:45:21 CEST schrieb Nathan Chancellor: > After commit 49b290e430d3 ("riscv: prevent compressed instructions in > alternatives"), builds with LLVM's integrated assembler fail: the commit in question didn't change anything there, so I guess the issue itself was present before that already and the commit only triggered the different buildbots? > In file included from arch/riscv/mm/init.c:10: > In file included from ./include/linux/mm.h:29: > In file included from ./include/linux/pgtable.h:6: > In file included from ./arch/riscv/include/asm/pgtable.h:108: > ./arch/riscv/include/asm/tlbflush.h:23:2: error: expected assembly-time absolute expression > ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory")); > ^ > ./arch/riscv/include/asm/errata_list.h:33:5: note: expanded from macro 'ALT_FLUSH_TLB_PAGE' > asm(ALTERNATIVE("sfence.vma %0", "sfence.vma", SIFIVE_VENDOR_ID, \ > ^ > ./arch/riscv/include/asm/alternative-macros.h:187:2: note: expanded from macro 'ALTERNATIVE' > _ALTERNATIVE_CFG(old_content, new_content, vendor_id, errata_id, CONFIG_k) > ^ > ./arch/riscv/include/asm/alternative-macros.h:113:2: note: expanded from macro '_ALTERNATIVE_CFG' > __ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, IS_ENABLED(CONFIG_k)) > ^ > ./arch/riscv/include/asm/alternative-macros.h:110:2: note: expanded from macro '__ALTERNATIVE_CFG' > ALT_NEW_CONTENT(vendor_id, errata_id, enable, new_c) > ^ > ./arch/riscv/include/asm/alternative-macros.h:99:3: note: expanded from macro 'ALT_NEW_CONTENT' > ".org . - (889b - 888b) + (887b - 886b)\n" \ > ^ > :26:6: note: instantiated into assembly here > .org . - (889b - 888b) + (887b - 886b) > ^ > > This error happens because LLVM's integrated assembler has a one-pass > design, which means it cannot figure out the instruction lengths when > the .org directive is outside of the subsection that contains the > instructions, which was changed by the .option directives added by the > above change. > > Move the .org directives before the .previous directive so that these > directives are always within the same subsection, which resolves the > failures and does not introduce any new issues with GNU as. This was > done for arm64 in commit 966a0acce2fc ("arm64/alternatives: move length > validation inside the subsection") and commit 22315a2296f4 ("arm64: > alternatives: Move length validation in alternative_{insn, endif}"). > > While there is no error from the assembly versions of the macro, they > appear to have the same problem so just make the same change there as > well so that there are no problems in the future. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1640 > Reported-by: kernel test robot > Signed-off-by: Nathan Chancellor In any case, on my svpbmt testcases (qemu + d1-nezha): Tested-by: Heiko Stuebner Reviewed-by: Heiko Stuebner Thanks for looking into that Heiko > --- > arch/riscv/include/asm/alternative-macros.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/include/asm/alternative-macros.h b/arch/riscv/include/asm/alternative-macros.h > index e13b1f6bb400..ec2f3f1b836f 100644 > --- a/arch/riscv/include/asm/alternative-macros.h > +++ b/arch/riscv/include/asm/alternative-macros.h > @@ -27,9 +27,9 @@ > \new_c > .option pop > 889 : > - .previous > .org . - (889b - 888b) + (887b - 886b) > .org . - (887b - 886b) + (889b - 888b) > + .previous > .endif > .endm > > @@ -94,9 +94,9 @@ > new_c "\n" \ > ".option pop\n" \ > "889 :\n" \ > - ".previous\n" \ > ".org . - (887b - 886b) + (889b - 888b)\n" \ > ".org . - (889b - 888b) + (887b - 886b)\n" \ > + ".previous\n" \ > ".endif\n" > > #define __ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, enable) \ > > base-commit: 93c0651617a62a69717299f1464dda798af8bebb >