Re: [PATCH] powerpc/bug: Add ARCH_WARN_ASM and refactor _EMIT_BUG_ENTRY for Rust support

Mukesh Kumar Chaurasiya <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,org.infradead.lists.linux-riscv,org.kernel.vger.linux-kernel,org.ozlabs.lists.linuxppc-dev
Message-ID <[email protected]>
On Wed, Aug 19, 2026 at 01:50:43PM +0200, Christophe Leroy (CS GROUP) wrote:
> 
> 
> Le 19/08/2026 à 10:48, Mukesh Kumar Chaurasiya (IBM) a écrit :
> > The Rust kernel infrastructure generates inline asm for WARN() via
> > ARCH_WARN_ASM(file, line, flags, size), expanding it through a C
> > preprocessor pass (generated_arch_warn_asm.rs.S) to produce an
> > arch-specific asm template string for use in Rust's core::arch macros.
> > 
> > powerpc currently lacks ARCH_WARN_ASM and ARCH_WARN_REACHABLE, causing
> > Rust builds to fail on powerpc.
> > 
> > Refactor _EMIT_BUG_ENTRY to accept explicit (file, line, flags) string
> > arguments rather than relying on positional asm operand references
> > (%0, %1, %2, %3). This allows the macro to be composed as a plain
> > string concatenation, which is required for ARCH_WARN_ASM where no asm
> > operand context exists.
> > 
> > Move the .org and .previous directives out of _EMIT_BUG_ENTRY and into
> > the BUG_ENTRY() call site to preserve existing behaviour while enabling
> > ARCH_WARN_ASM to supply its own size operand independently.
> > 
> > Add ARCH_WARN_REACHABLE as an empty define, matching the arm64
> > convention, indicating that no additional reachability annotation is
> > needed after a WARN on powerpc.
> > 
> > This brings powerpc into line with x86, arm64, s390, and riscv, all of
> > which already define ARCH_WARN_ASM and ARCH_WARN_REACHABLE.
> > 
> > Suggested-by: FUJITA Tomonori <[email protected]>
> > Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]>
> > ---
> >   arch/powerpc/include/asm/bug.h | 28 ++++++++++++++++------------
> >   1 file changed, 16 insertions(+), 12 deletions(-)
> > 
> > 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__ */
> 
> Sorry, I still don't understand. The only place the new macro is used is a
> .S file (namely rust/kernel/generated_arch_warn_asm.rs.S), and the change
> this patch implements is inside a #if !__ASSEMBLER__.
> 
> What am I missing ?
> 
> Christophe

Hey Christophe,

The code calling ARCH_WARN_ASM is a .rs.S file that goes through the C
preprocessor as part of the Rust build machinery.

The intended mechanism is essentially

generated_arch_warn_asm.rs.S
          |
          v
         CPP
          |
          | includes <linux/bug.h>
          |
          v
ARCH_WARN_ASM(...) gets expanded
          |
          v
Rust source containing the generated assembly string

The patch therefore needs ARCH_WARN_ASM in the non-__ASSEMBLER__ section,
because that section is where the macros intended for C preprocessing
are defined.

The thing is .rs.S is not using ARCH_WARN_ASM as an assembler-time macro,
it is using the C preprocessor to expand ARCH_WARN_ASM before the
Rust/assembly processing stage.

This is my understanding of things, if i am wrong somewhere maybe
someone can clarify.

Regards,
Mukesh


[...]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.