From: "Mukesh Kumar Chaurasiya (IBM)" <mkchauras@gmail.com>
To: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com,
chleroy@kernel.org, pjw@kernel.org, palmer@dabbelt.com,
aou@eecs.berkeley.edu, alex@ghiti.fr, ojeda@kernel.org,
boqun@kernel.org, gary@garyguo.net, bjorn3_gh@protonmail.com,
lossin@kernel.org, a.hindborg@kernel.org, aliceryhl@google.com,
tmgross@umich.edu, dakr@kernel.org, daniel.almeida@collabora.com,
tamird@kernel.org, acourbot@nvidia.com, work@onurozkan.dev,
mkchauras@gmail.com, linkmauve@linkmauve.fr,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, rust-for-linux@vger.kernel.org
Cc: FUJITA Tomonori <tomo@flapping.org>
Subject: [PATCH V3] powerpc/bug: Add ARCH_WARN_ASM and refactor _EMIT_BUG_ENTRY for Rust support
Date: Thu, 10 Sep 2026 15:38:02 +0530 [thread overview]
Message-ID: <20260910100801.2159785-2-mkchauras@gmail.com> (raw)
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 with
```
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
```
To add ARCH_WARN_ASM, _EMIT_BUG_ENTRY first needs to be refactored.
The old definition was a bare macro with no parameters, relying on
positional asm operand references (%0-%3), hardcoding the backward
reference to local label 1b, and including .org/.previous directives
inline. That made it impossible to compose as a plain string outside of
an asm operand context, and left an invisible contract that callers must
always emit their trap at label 1:.
Refactor _EMIT_BUG_ENTRY to take explicit (label, file, line, flags)
string arguments via string concatenation. This removes the dependency
on asm operand numbering and makes the trap label an explicit argument,
so the caller's intent is visible at the call site and a future caller
using a different label cannot silently produce a wrong bug table entry.
Move the .org and .previous directives out of _EMIT_BUG_ENTRY and into
each call site, so BUG_ENTRY() can still pass sizeof(struct bug_entry)
as an asm operand while ARCH_WARN_ASM can supply its own size string
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.
Reported-by: FUJITA Tomonori <tomo@flapping.org>
Closes: https://lore.kernel.org/all/anG67Q6Y59kDqh-c@desktop
Fixes: 73b741adb264 ("rust: Add PowerPC support")
Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
---
Changelog:
V2 -> V3:
- Add label argument in _EMIT_BUG_ENTRY
V2: https://lore.kernel.org/all/20260910071252.1950488-2-mkchauras@gmail.com
V1 -> V2:
- commit message now has error, fixes tag and closes tag
V1: https://lore.kernel.org/all/20260819084825.969116-1-mkchauras@gmail.com
arch/powerpc/include/asm/bug.h | 36 +++++++++++++++++++---------------
1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h
index 0db48977c70c..df2183c35945 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 \
- ".section __bug_table,\"aw\"\n" \
- "2: .4byte 1b - .\n" \
- " .4byte %0 - .\n" \
- " .short %1, %2\n" \
- ".org 2b+%3\n" \
- ".previous\n"
+#define _EMIT_BUG_ENTRY(label, file, line, flags) \
+ ".section __bug_table,\"aw\"\n" \
+ "2: .4byte " label "b - .\n" \
+ " .4byte " file " - .\n" \
+ " .short " line ", " flags "\n"
#else
-#define _EMIT_BUG_ENTRY \
- ".section __bug_table,\"aw\"\n" \
- "2: .4byte 1b - .\n" \
- " .short %2\n" \
- ".org 2b+%3\n" \
- ".previous\n"
+#define _EMIT_BUG_ENTRY(label, file, line, flags) \
+ ".section __bug_table,\"aw\"\n" \
+ "2: .4byte " label "b - .\n" \
+ " .short " flags "\n"
#endif
#define BUG_ENTRY(cond_str, insn, flags, ...) \
__asm__ __volatile__( \
"1: " insn "\n" \
- _EMIT_BUG_ENTRY \
+ _EMIT_BUG_ENTRY("1", "%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("1", 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
--
2.55.0
next reply other threads:[~2026-09-10 10:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-10 10:08 Mukesh Kumar Chaurasiya (IBM) [this message]
2026-09-10 12:05 ` Gary Guo
2026-09-10 13:24 ` FUJITA Tomonori
2026-09-11 5:21 ` Mukesh Kumar Chaurasiya
2026-09-11 5:16 ` Mukesh Kumar Chaurasiya
2026-09-10 15:08 ` Christophe Leroy (CS GROUP)
2026-09-11 5:24 ` Mukesh Kumar Chaurasiya
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=20260910100801.2159785-2-mkchauras@gmail.com \
--to=mkchauras@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=alex@ghiti.fr \
--cc=aliceryhl@google.com \
--cc=aou@eecs.berkeley.edu \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=chleroy@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=linkmauve@linkmauve.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lossin@kernel.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=ojeda@kernel.org \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=tomo@flapping.org \
--cc=work@onurozkan.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®