On Wed, Mar 25, 2026 at 01:59:55PM +0530, Madhavan Srinivasan wrote: > > On 2/10/26 2:30 PM, 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 and power10 pseries qemu. I > > I request Link to test the ppc32 part as i don't have a hardware to test > > it out. > > > > [1] https://lore.kernel.org/all/[email protected] > > [2] https://lore.kernel.org/all/[email protected] > > Could see these build issues with the Rust patchset in the compilation of > powerpc-next-test > This happens when compilation happens only with few threads > > # rustc --version > rustc 1.94.0 (4a4ef493e 2026-03-02) > > .... > EXPORTS rust/exports_core_generated.h > BINDGEN rust/bindings/bindings_generated.rs > BINDGEN rust/bindings/bindings_helpers_generated.rs > CC rust/helpers/helpers.o > EXPORTS rust/exports_helpers_generated.h > RUSTC L rust/compiler_builtins.o > RUSTC L rust/ffi.o > RUSTC PL rust/libproc_macro2.rlib > error[E0464]: multiple candidates for `rmeta` dependency `core` found > --> rust/proc-macro2/marker.rs:4:5 > | > 4 | use core::marker::PhantomData; > | ^^^^ > | > = note: candidate #1: > /root/.rustup/toolchains/nightly-powerpc64le-unknown-linux-gnu/lib/rustlib/powerpc64le-unknown-linux-gnu/lib/libcore-951759db375eea0c.rmeta > = note: candidate #2: ./rust/libcore.rmeta > > error[E0119]: conflicting implementations of trait `PartialEq` for type > `fallback::Ident` > --> rust/proc-macro2/fallback.rs:875:1 > | > 869 | impl PartialEq for Ident { > | ------------------------ first implementation here > ... > 875 | / impl<T> PartialEq<T> for Ident > 876 | | where > 877 | | T: ?Sized + AsRef<str>, > | |___________________________^ conflicting implementation for > `fallback::Ident` > > error[E0277]: `LexError` doesn't implement `std::fmt::Display` > --> rust/proc-macro2/lib.rs:347:16 > | > 347 | impl Error for LexError {} > | ^^^^^^^^ unsatisfied trait bound > | > help: the trait `std::fmt::Display` is not implemented for `LexError` > --> rust/proc-macro2/lib.rs:204:1 > | > 204 | pub struct LexError { > | ^^^^^^^^^^^^^^^^^^^ > note: required by a bound in `std::error::Error` > --> > /root/.rustup/toolchains/nightly-powerpc64le-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/error.rs:59:26 > | > 59 | pub trait Error: Debug + Display { > | ^^^^^^^ required by this bound in `Error` > > error[E0277]: `LexError` doesn't implement `Debug` > --> rust/proc-macro2/lib.rs:347:16 > | > 347 | impl Error for LexError {} > | ^^^^^^^^ unsatisfied trait bound > | > help: the trait `Debug` is not implemented for `LexError` > --> rust/proc-macro2/lib.rs:204:1 > | > 204 | pub struct LexError { > | ^^^^^^^^^^^^^^^^^^^ > = note: add `#[derive(Debug)]` to `LexError` or manually `impl Debug for > LexError` > note: required by a bound in `std::error::Error` > --> > /root/.rustup/toolchains/nightly-powerpc64le-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/error.rs:59:18 > | > 59 | pub trait Error: Debug + Display { > | ^^^^^ required by this bound in `Error` > > error: aborting due to 4 previous errors > > ...... > But when parallelized with more threads (-j 128) compilation passes with out > any error > There is some ordering of libcore is messing up I guess (I could be wrong) > (I have removed the warning of unstable features messages here for cleaner > output) > > .... > VDSO64SYM include/generated/vdso64-offsets.h > RUSTC L rust/core.o > BINDGEN rust/bindings/bindings_generated.rs > BINDGEN rust/bindings/bindings_helpers_generated.rs > CC rust/helpers/helpers.o > RUSTC PL rust/libproc_macro2.rlib > BINDGEN rust/uapi/uapi_generated.rs > RSCPP rust/kernel/generated_arch_static_branch_asm.rs > RSCPP rust/kernel/generated_arch_warn_asm.rs > RSCPP rust/kernel/generated_arch_reachable_asm.rs > clang diag: ./arch/powerpc/include/uapi/asm/ioctl.h:5:9: warning: > '_IOC_SIZEBITS' macro redefined [-Wmacro-redefined] > clang diag: ./arch/powerpc/include/uapi/asm/ioctl.h:6:9: warning: > '_IOC_DIRBITS' macro redefined [-Wmacro-redefined] > clang diag: ./arch/powerpc/include/uapi/asm/ioctl.h:8:9: warning: > '_IOC_NONE' macro redefined [-Wmacro-redefined] > clang diag: ./arch/powerpc/include/uapi/asm/ioctl.h:10:9: warning: > '_IOC_WRITE' macro redefined [-Wmacro-redefined] > EXPORTS rust/exports_helpers_generated.h > RUSTC PL rust/libquote.rlib > RUSTC PL rust/libsyn.rlib > RUSTC P rust/libpin_init_internal.so > RUSTC P rust/libmacros.so > EXPORTS rust/exports_core_generated.h > RUSTC L rust/compiler_builtins.o > RUSTC L rust/ffi.o > RUSTC L rust/pin_init.o > RUSTC L rust/build_error.o > RUSTC L rust/bindings.o > RUSTC L rust/uapi.o > EXPORTS rust/exports_bindings_generated.h > RUSTC L rust/kernel.o > EXPORTS rust/exports_kernel_generated.h > LDS scripts/module.lds > HOSTCC usr/gen_init_cpio > CC init/main.o > .... > > Also I see some errors when compiling modules. I am looking at these and any > help is welcome. > I will pull out Rust patches for now from powerpc-linux next-test branch and > once this is > restored I will add these patches back to branch for the merge. > > Maddy > Aah this happens because core.o is compiled before libproc_macro2.rlib starts compiling. Once the core.o is compiled it generates the libcore.rmeta, leading to conflict in two libcore.rmeta available.
I can think of 2 solutions here for this, 1. We can make the libproc_macro2.rlib libquote.rlib libsyn.rlib compile befor the core.o is compiled OR 2. We can force these to use the toolchain core's metadata and not look into the kernel's rust directory. I am still not able to figure out why this is not happening for x86. What should we do in this case? Regards, Mukesh > > Changelog: > > V5 -> V6: > > - Added a missing Tested by from Venkat which got missed since V3 > > - Support is marked as Maintained instead of experimental > > V5: https://lore.kernel.org/all/[email protected] > > > > V4 -> V5: > > - Removed a nested ifdef from PPC64 for Little endian toolchain > > V4: https://lore.kernel.org/all/[email protected] > > > > V3 -> V4: > > - Co-developed-by header added in patch 1 > > V3: https://lore.kernel.org/all/[email protected] > > > > V2 -> V3: > > - Splited HAVE_RUST in 2 lines > > - BINDGEN_TARGET_powerpc initialized before assigning the same to > > BINDGEN_TARGET > > V2: https://lore.kernel.org/all/[email protected] > > > > V1 -> V2: > > - jump label fix for rust has been moved to a separate patch > > - PPC32 support has been taken > > - rust support has been marked experimental > > - target.json dependency has been removed > > - HAVE_RUST now depends on CPU_LITTLE_ENDIAN for PPC64 > > > > > > Link Mauve (1): > > rust: Add PowerPC support > > > > Mukesh Kumar Chaurasiya (IBM) (2): > > powerpc/jump_label: adjust inline asm to be consistent > > powerpc: Enable Rust for ppc64le > > > > Documentation/rust/arch-support.rst | 1 + > > arch/powerpc/Kconfig | 2 ++ > > arch/powerpc/Makefile | 7 +++++++ > > arch/powerpc/include/asm/jump_label.h | 23 +++++++++++++---------- > > rust/Makefile | 10 +++++++++- > > 5 files changed, 32 insertions(+), 11 deletions(-) > >
