From: Charlie Jenkins <charlie@rivosinc.com>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Ard Biesheuvel <ardb@kernel.org>,
Ben Dooks <ben.dooks@codethink.co.uk>,
Pasha Bouzarjomehri <pasha@rivosinc.com>,
Emil Renner Berthing <emil.renner.berthing@canonical.com>,
Alexandre Ghiti <alexghiti@rivosinc.com>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Peter Zijlstra <peterz@infradead.org>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Jason Baron <jbaron@akamai.com>,
Andrew Jones <ajones@ventanamicro.com>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, llvm@lists.linux.dev
Subject: Re: [PATCH v10 2/2] riscv: Add runtime constant support
Date: Tue, 1 Apr 2025 13:43:08 -0700 [thread overview]
Message-ID: <Z-xP3M7-GSUCHQkb@ghost> (raw)
In-Reply-To: <20250401192833.GA3645424@ax162>
On Tue, Apr 01, 2025 at 12:28:33PM -0700, Nathan Chancellor wrote:
> Hi Charlie,
>
> On Wed, Mar 19, 2025 at 11:35:20AM -0700, Charlie Jenkins wrote:
> > Implement the runtime constant infrastructure for riscv. Use this
> > infrastructure to generate constants to be used by the d_hash()
> > function.
> >
> > This is the riscv variant of commit 94a2bc0f611c ("arm64: add 'runtime
> > constant' support") and commit e3c92e81711d ("runtime constants: add
> > x86 architecture support").
> >
> > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
> > Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
> ...
> > diff --git a/arch/riscv/include/asm/runtime-const.h b/arch/riscv/include/asm/runtime-const.h
> ...
> > +#define RISCV_RUNTIME_CONST_64_ZBA \
> > + ".option push\n\t" \
> > + ".option arch,+zba\n\t" \
> > + "slli %[__tmp],%[__tmp],32\n\t" \
> > + "add.uw %[__ret],%[__ret],%[__tmp]\n\t" \
> > + "nop\n\t" \
> > + "nop\n\t" \
> > + ".option pop\n\t" \
> ...
> > +#if defined(CONFIG_RISCV_ISA_ZBA) && defined(CONFIG_RISCV_ISA_ZBKB)
> ...
> > +#elif defined(CONFIG_RISCV_ISA_ZBA)
> > +#define runtime_const_ptr(sym) \
> > +({ \
> > + typeof(sym) __ret, __tmp; \
> > + asm_inline(RISCV_RUNTIME_CONST_64_PREAMBLE \
> > + ALTERNATIVE( \
> > + RISCV_RUNTIME_CONST_64_BASE, \
> > + RISCV_RUNTIME_CONST_64_ZBA, \
> > + 0, RISCV_ISA_EXT_ZBA, 1 \
> > + ) \
> > + RISCV_RUNTIME_CONST_64_POSTAMBLE(sym) \
> > + : [__ret] "=r" (__ret), [__tmp] "=r" (__tmp)); \
> > + __ret; \
> > +})
>
> This breaks the build for clang versions 16 and earlier because they do
> not support '.option arch' and it is used in CONFIG_RISCV_ISA_ZBA, which
> has no dependencies and it is default on.
>
> $ make -skj"$(nproc)" ARCH=riscv LLVM=1 mrproper defconfig fs/dcache.o
> fs/dcache.c:117:9: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax' [-Winline-asm]
> return runtime_const_ptr(dentry_hashtable) +
> ^
> arch/riscv/include/asm/runtime-const.h:103:4: note: expanded from macro 'runtime_const_ptr'
> RISCV_RUNTIME_CONST_64_ZBA, \
> ^
> arch/riscv/include/asm/runtime-const.h:57:17: note: expanded from macro 'RISCV_RUNTIME_CONST_64_ZBA'
> ".option push\n\t" \
> ^
> <inline asm>:32:10: note: instantiated into assembly here
> .option arch,+zba
> ^
> fs/dcache.c:117:9: error: instruction requires the following: 'Zba' (Address Generation Instructions)
> return runtime_const_ptr(dentry_hashtable) +
> ^
> arch/riscv/include/asm/runtime-const.h:103:4: note: expanded from macro 'runtime_const_ptr'
> RISCV_RUNTIME_CONST_64_ZBA, \
> ^
> arch/riscv/include/asm/runtime-const.h:59:30: note: expanded from macro 'RISCV_RUNTIME_CONST_64_ZBA'
> "slli %[__tmp],%[__tmp],32\n\t" \
> ^
> <inline asm>:34:2: note: instantiated into assembly here
> add.uw a2,a2,a3
> ^
> ...
>
> $ rg 'OPTION_ARCH|ZBA' .config
> 364:CONFIG_RISCV_ISA_ZBA=y
>
> Should it grow a dependency on AS_HAS_OPTION_ARCH or should there be a
> different fix?
This should have been fixed by Alex's patch [1]. Zba is in an awkward
state because BPF generates Zba code without the need for toolchain
support.
[1] https://lore.kernel.org/all/20250328115422.253670-1-alexghiti@rivosinc.com/
>
> Cheers,
> Nathan
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Charlie Jenkins <charlie@rivosinc.com>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Ard Biesheuvel <ardb@kernel.org>,
Ben Dooks <ben.dooks@codethink.co.uk>,
Pasha Bouzarjomehri <pasha@rivosinc.com>,
Emil Renner Berthing <emil.renner.berthing@canonical.com>,
Alexandre Ghiti <alexghiti@rivosinc.com>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Peter Zijlstra <peterz@infradead.org>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Jason Baron <jbaron@akamai.com>,
Andrew Jones <ajones@ventanamicro.com>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, llvm@lists.linux.dev
Subject: Re: [PATCH v10 2/2] riscv: Add runtime constant support
Date: Tue, 1 Apr 2025 13:43:08 -0700 [thread overview]
Message-ID: <Z-xP3M7-GSUCHQkb@ghost> (raw)
In-Reply-To: <20250401192833.GA3645424@ax162>
On Tue, Apr 01, 2025 at 12:28:33PM -0700, Nathan Chancellor wrote:
> Hi Charlie,
>
> On Wed, Mar 19, 2025 at 11:35:20AM -0700, Charlie Jenkins wrote:
> > Implement the runtime constant infrastructure for riscv. Use this
> > infrastructure to generate constants to be used by the d_hash()
> > function.
> >
> > This is the riscv variant of commit 94a2bc0f611c ("arm64: add 'runtime
> > constant' support") and commit e3c92e81711d ("runtime constants: add
> > x86 architecture support").
> >
> > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
> > Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
> ...
> > diff --git a/arch/riscv/include/asm/runtime-const.h b/arch/riscv/include/asm/runtime-const.h
> ...
> > +#define RISCV_RUNTIME_CONST_64_ZBA \
> > + ".option push\n\t" \
> > + ".option arch,+zba\n\t" \
> > + "slli %[__tmp],%[__tmp],32\n\t" \
> > + "add.uw %[__ret],%[__ret],%[__tmp]\n\t" \
> > + "nop\n\t" \
> > + "nop\n\t" \
> > + ".option pop\n\t" \
> ...
> > +#if defined(CONFIG_RISCV_ISA_ZBA) && defined(CONFIG_RISCV_ISA_ZBKB)
> ...
> > +#elif defined(CONFIG_RISCV_ISA_ZBA)
> > +#define runtime_const_ptr(sym) \
> > +({ \
> > + typeof(sym) __ret, __tmp; \
> > + asm_inline(RISCV_RUNTIME_CONST_64_PREAMBLE \
> > + ALTERNATIVE( \
> > + RISCV_RUNTIME_CONST_64_BASE, \
> > + RISCV_RUNTIME_CONST_64_ZBA, \
> > + 0, RISCV_ISA_EXT_ZBA, 1 \
> > + ) \
> > + RISCV_RUNTIME_CONST_64_POSTAMBLE(sym) \
> > + : [__ret] "=r" (__ret), [__tmp] "=r" (__tmp)); \
> > + __ret; \
> > +})
>
> This breaks the build for clang versions 16 and earlier because they do
> not support '.option arch' and it is used in CONFIG_RISCV_ISA_ZBA, which
> has no dependencies and it is default on.
>
> $ make -skj"$(nproc)" ARCH=riscv LLVM=1 mrproper defconfig fs/dcache.o
> fs/dcache.c:117:9: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax' [-Winline-asm]
> return runtime_const_ptr(dentry_hashtable) +
> ^
> arch/riscv/include/asm/runtime-const.h:103:4: note: expanded from macro 'runtime_const_ptr'
> RISCV_RUNTIME_CONST_64_ZBA, \
> ^
> arch/riscv/include/asm/runtime-const.h:57:17: note: expanded from macro 'RISCV_RUNTIME_CONST_64_ZBA'
> ".option push\n\t" \
> ^
> <inline asm>:32:10: note: instantiated into assembly here
> .option arch,+zba
> ^
> fs/dcache.c:117:9: error: instruction requires the following: 'Zba' (Address Generation Instructions)
> return runtime_const_ptr(dentry_hashtable) +
> ^
> arch/riscv/include/asm/runtime-const.h:103:4: note: expanded from macro 'runtime_const_ptr'
> RISCV_RUNTIME_CONST_64_ZBA, \
> ^
> arch/riscv/include/asm/runtime-const.h:59:30: note: expanded from macro 'RISCV_RUNTIME_CONST_64_ZBA'
> "slli %[__tmp],%[__tmp],32\n\t" \
> ^
> <inline asm>:34:2: note: instantiated into assembly here
> add.uw a2,a2,a3
> ^
> ...
>
> $ rg 'OPTION_ARCH|ZBA' .config
> 364:CONFIG_RISCV_ISA_ZBA=y
>
> Should it grow a dependency on AS_HAS_OPTION_ARCH or should there be a
> different fix?
This should have been fixed by Alex's patch [1]. Zba is in an awkward
state because BPF generates Zba code without the need for toolchain
support.
[1] https://lore.kernel.org/all/20250328115422.253670-1-alexghiti@rivosinc.com/
>
> Cheers,
> Nathan
next prev parent reply other threads:[~2025-04-01 20:43 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 18:35 [PATCH v10 0/2] riscv: Add runtime constant support Charlie Jenkins
2025-03-19 18:35 ` Charlie Jenkins
2025-03-19 18:35 ` [PATCH v10 1/2] riscv: Move nop definition to insn-def.h Charlie Jenkins
2025-03-19 18:35 ` Charlie Jenkins
2025-03-20 9:02 ` Andrew Jones
2025-03-20 9:02 ` Andrew Jones
2025-03-19 18:35 ` [PATCH v10 2/2] riscv: Add runtime constant support Charlie Jenkins
2025-03-19 18:35 ` Charlie Jenkins
2025-03-28 15:42 ` Klara Modin
2025-03-28 15:42 ` Klara Modin
2025-03-28 17:35 ` Alexandre Ghiti
2025-03-28 17:35 ` Alexandre Ghiti
2025-03-28 20:22 ` Klara Modin
2025-03-28 20:22 ` Klara Modin
2025-03-28 19:51 ` Charlie Jenkins
2025-03-28 19:51 ` Charlie Jenkins
2025-03-28 20:22 ` Klara Modin
2025-03-28 20:22 ` Klara Modin
2025-04-01 19:28 ` Nathan Chancellor
2025-04-01 19:28 ` Nathan Chancellor
2025-04-01 20:43 ` Charlie Jenkins [this message]
2025-04-01 20:43 ` Charlie Jenkins
2025-03-27 3:24 ` [PATCH v10 0/2] " patchwork-bot+linux-riscv
2025-03-27 3:24 ` patchwork-bot+linux-riscv
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z-xP3M7-GSUCHQkb@ghost \
--to=charlie@rivosinc.com \
--cc=ajones@ventanamicro.com \
--cc=alexghiti@rivosinc.com \
--cc=aou@eecs.berkeley.edu \
--cc=ardb@kernel.org \
--cc=ben.dooks@codethink.co.uk \
--cc=emil.renner.berthing@canonical.com \
--cc=jbaron@akamai.com \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=nathan@kernel.org \
--cc=palmer@dabbelt.com \
--cc=pasha@rivosinc.com \
--cc=paul.walmsley@sifive.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.