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

Reply via email to