On Tue, Aug 04, 2026 at 10:40:35PM +0900, FUJITA Tomonori wrote: > On Tue, 4 Aug 2026 12:11:57 +0200 > Link Mauve <[email protected]> wrote: > > > Hi, > > > > On Mon, Aug 03, 2026 at 12:27:13PM +0530, Madhavan Srinivasan wrote: > >> On Wed, 08 Jul 2026 13:54:47 +0530, Mukesh Kumar Chaurasiya (IBM) wrote: > >> > Enable experimental rust support for ppc64le and ppc32be. The patch for > >> > ppc32 has been provided by Link Mauve[1] and ppc64le support[2] has been > >> > merged over it. ppc32 needs some toolchain fixes mentioned in the patch > >> > `rust: Add PowerPC support` and the discussion for that is done here[1]. > >> > > >> > This has been tested on > >> > - powernv9 hardware > >> > - pseries P11 hardware > >> > - pseries(9, 10) qemu > >> > - powernv(9, 10) qemu > >> > - rustdoc on x86 and powerpc64le > >> > - rusttest on x86 and powerpc64le > >> > > >> > [...] > >> > >> Applied to powerpc/next. > >> > >> [1/7] rust: Fix "multiple candidates for rmeta dependency core" error > >> > >> https://git.kernel.org/powerpc/c/00cdfd072c709c608606461d7d44d4613119bfa9 > >> [2/7] dma-resv: Fix undefined symbol when CONFIG_DMA_SHARED_BUFFER is > >> disabled > >> > >> https://git.kernel.org/powerpc/c/be809b60cbb61aab96179f44ac3670242ae72996 > >> [3/7] powerpc/jump_label: adjust inline asm to be consistent > >> > >> https://git.kernel.org/powerpc/c/13244c0a40139fe66c4c5c5655f4d732a6002957 > >> [4/7] rust/powerpc: Set min rustc version for powerpc > >> > >> https://git.kernel.org/powerpc/c/e299147cdc8e19c6421a6b7863dc82a35b09d967 > >> [5/7] rust: Make __udivdi3() and __umoddi3() panic > >> > >> https://git.kernel.org/powerpc/c/c93c194e4ee71a734986fd99a8b1ec9fbb7a9b8b > >> [6/7] rust: Add PowerPC support > >> > >> https://git.kernel.org/powerpc/c/73b741adb264967093ef4eb59905618a7e0d0de0 > >> [7/7] powerpc: Enable Rust for ppc64le > >> > >> https://git.kernel.org/powerpc/c/bc87cbdb952e9223616b839d64bdb4723aa2ed1d > >> > >> cheers > >> > > > > I just tested those again in linux-next, with the Wii support series on > > top, but now the kernel fails to build due to ARCH_WARN_ASM and > > ARCH_WARN_REACHABLE not being defined on PowerPC: > > ``` > > error: no rules expected `ARCH_WARN_ASM` > > --> > > /home/linkmauve/dev/linux/wii/rust/kernel/generated_arch_warn_asm.rs:1:28 > > | > > 1 | ::kernel::concat_literals!(ARCH_WARN_ASM("{file}", "{line}", > > "{flags}", "{size}")) > > | ^^^^^^^^^^^^^ no rules expected this token > > in macro call > > | > > ::: ../rust/kernel/lib.rs:279:1 > > | > > 279 | macro_rules! concat_literals { > > | ---------------------------- when calling this macro > > | > > = note: while trying to match sequence start > > > > error: no rules expected `ARCH_WARN_REACHABLE` > > --> > > /home/linkmauve/dev/linux/wii/rust/kernel/generated_arch_reachable_asm.rs:1:28 > > | > > 1 | ::kernel::concat_literals!(ARCH_WARN_REACHABLE) > > | ^^^^^^^^^^^^^^^^^^^ no rules expected this > > token in macro call > > | > > ::: ../rust/kernel/lib.rs:279:1 > > | > > 279 | macro_rules! concat_literals { > > | ---------------------------- when calling this macro > > | > > = note: while trying to match sequence start > > > > error: aborting due to 2 previous errors > > ``` > > > > This is in addition to the bindings::kvfree_call_rcu() call, but that > > one is already being handled in a different thread. > > Looks like powerpc needs something like the followings: > > diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h > index 0db48977c70c..8aba39e0cf26 100644 > --- a/arch/powerpc/include/asm/bug.h > +++ b/arch/powerpc/include/asm/bug.h > @@ -32,34 +32,38 @@ > #endif /* verbose */ > > #else /* !__ASSEMBLER__ */ > -/* _EMIT_BUG_ENTRY expects args %0,%1,%2,%3 to be FILE, LINE, flags and > - sizeof(struct bug_entry), respectively */ > #ifdef CONFIG_DEBUG_BUGVERBOSE > -#define _EMIT_BUG_ENTRY \ > +#define _EMIT_BUG_ENTRY(file, line, flags) \ > ".section __bug_table,\"aw\"\n" \ > "2: .4byte 1b - .\n" \ > - " .4byte %0 - .\n" \ > - " .short %1, %2\n" \ > - ".org 2b+%3\n" \ > - ".previous\n" > + " .4byte " file " - .\n" \ > + " .short " line ", " flags "\n" > #else > -#define _EMIT_BUG_ENTRY \ > +#define _EMIT_BUG_ENTRY(file, line, flags) \ > ".section __bug_table,\"aw\"\n" \ > "2: .4byte 1b - .\n" \ > - " .short %2\n" \ > - ".org 2b+%3\n" \ > - ".previous\n" > + " .short " flags "\n" > #endif > > #define BUG_ENTRY(cond_str, insn, flags, ...) \ > __asm__ __volatile__( \ > "1: " insn "\n" \ > - _EMIT_BUG_ENTRY \ > + _EMIT_BUG_ENTRY("%0", "%1", "%2") \ > + ".org 2b+%3\n" \ > + ".previous\n" \ > : : "i" (WARN_CONDITION_STR(cond_str) __FILE__), "i" > (__LINE__), \ > "i" (flags), \ > "i" (sizeof(struct bug_entry)), \ > ##__VA_ARGS__) > > +#define ARCH_WARN_ASM(file, line, flags, size) \ > + "1: twi 31, 0, 0\n" \ > + _EMIT_BUG_ENTRY(file, line, flags) \ > + ".org 2b+" size "\n" \ > + ".previous\n" > + > +#define ARCH_WARN_REACHABLE > + > /* > * BUG_ON() and WARN_ON() do their best to cooperate with compile-time > * optimisations. However depending on the complexity of the condition
Yeah, This makes sense. I'll work on this and send out a fix soon. Thanks and Regards, Mukesh
