Re: [PATCH V17 0/7] Rust Support for powerpc

FUJITA Tomonori <[email protected]> Tue, 04 Aug 2026 22:40:35 +0900 (JST)
Newsgroups gmane.linux.ports.ppc.embedded
Message-ID <20260804.224035.269658578200153488.tomo__20273.0445236497$1785885116$gmane$org@flapping.org>
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