[PATCH V3 0/3] Rust support for powerpc

Venkat venkat88 at linux.ibm.com
Sat Feb 7 03:55:09 AEDT 2026



> On 5 Feb 2026, at 11:34 PM, Mukesh Kumar Chaurasiya (IBM) <mkchauras at gmail.com> 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/20260204030507.8203-1-linkmauve@linkmauve.fr
> [2] https://lore.kernel.org/all/20260204042417.83903-1-mkchauras@gmail.com
> 
> Changelog:
> 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/20260204210125.613350-1-mkchauras@gmail.com
> 
> 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                 |  9 +++++++++
> arch/powerpc/include/asm/jump_label.h | 23 +++++++++++++----------
> rust/Makefile                         | 12 +++++++++++-
> 5 files changed, 36 insertions(+), 11 deletions(-)
> 
> -- 
> 2.52.0
> 

Tested this patch set, by applying on mainline kernel. Attached is the .config file used.

Please add below tag.

Tested-by: Venkat Rao Bagalkote <venkat88 at linux.ibm.com>

Logs:

rustc --version
rustc 1.95.0-nightly (e96bb7e44 2026-01-27)

llvm-18.1.8-3.el9.ppc64le

sudo insmod samples/rust/rust_minimal.ko
[   39.532119] rust_minimal: loading out-of-tree module taints kernel.
[   39.532132] rust_minimal: module verification failed: signature and/or required key missing - tainting kernel
[   39.532856] rust_minimal: Rust minimal sample (init)
[   39.532860] rust_minimal: Am I built-in? false
[   39.532864] rust_minimal: test_parameter: 1
# dmesg | tail -n 30
[    3.418850] systemd[1]: Mounted Kernel Trace File System.
[    3.419194] systemd[1]: Finished Create List of Static Device Nodes.
[    3.419482] systemd[1]: modprobe at configfs.service: Deactivated successfully.
[    3.419647] systemd[1]: Finished Load Kernel Module configfs.
[    3.419913] systemd[1]: modprobe at drm.service: Deactivated successfully.
[    3.420056] systemd[1]: Finished Load Kernel Module drm.
[    3.420405] systemd[1]: Finished Read and set NIS domainname from /etc/sysconfig/network.
[    3.420694] systemd[1]: Finished Generate network units from Kernel command line.
[    3.422214] systemd[1]: Mounting Kernel Configuration File System...
[    3.423543] systemd[1]: Finished Apply Kernel Variables.
[    3.424011] systemd[1]: Mounted Kernel Configuration File System.
[    3.430589] systemd[1]: Started Journal Service.
[    3.477706] fuse: init (API version 7.45)
[    3.548678] EXT4-fs (sda3): re-mounted 78691517-64fe-451b-9009-14359b774643 r/w.
[    3.556791] systemd-journald[640]: Received client request to flush runtime journal.
[    3.681167] Adding 10485696k swap on /dev/sda2.  Priority:-1 extents:1 across:10485696k SS
[    3.693490] pseries_rng: Registering IBM pSeries RNG driver
[    3.693904] cryptd: max_cpu_qlen set to 1000
[    4.702590] RPC: Registered named UNIX socket transport module.
[    4.702604] RPC: Registered udp transport module.
[    4.702607] RPC: Registered tcp transport module.
[    4.702609] RPC: Registered tcp-with-tls transport module.
[    4.702612] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    6.701147] block sda: the capability attribute has been deprecated.
[   10.150485] fbcon: Taking over console
[   39.532119] rust_minimal: loading out-of-tree module taints kernel.
[   39.532132] rust_minimal: module verification failed: signature and/or required key missing - tainting kernel
[   39.532856] rust_minimal: Rust minimal sample (init)
[   39.532860] rust_minimal: Am I built-in? false
[   39.532864] rust_minimal: test_parameter: 1
# sudo rmmod rust_minimal
[ 4125.461822] rust_minimal: My numbers are [72, 108, 200]
[ 4125.461839] rust_minimal: Rust minimal sample (exit)
# sudo insmod samples/rust/rust_print.ko
[ 4142.492146] rust_print: Rust printing macros sample (init)
[ 4142.492158] rust_print: Emergency message (level 0) without args
[ 4142.492161] rust_print: Alert message (level 1) without args
[ 4142.492163] rust_print: Critical message (level 2) without args
[ 4142.492166] rust_print: Error message (level 3) without args
[ 4142.492169] rust_print: Warning message (level 4) without args
[ 4142.492171] rust_print: Notice message (level 5) without args
[ 4142.492174] rust_print: Info message (level 6) without args
[ 4142.492176] rust_print: A line that is continued without args
[ 4142.492181] rust_print: Emergency message (level 0) with args
[ 4142.492185] rust_print: Alert message (level 1) with args
[ 4142.492188] rust_print: Critical message (level 2) with args
[ 4142.492190] rust_print: Error message (level 3) with args
[ 4142.492193] rust_print: Warning message (level 4) with args
[ 4142.492195] rust_print: Notice message (level 5) with args
[ 4142.492197] rust_print: Info message (level 6) with args
[ 4142.492200] rust_print: A line that is continued with args
[ 4142.492205] rust_print: 1
[ 4142.492206] rust_print: "hello, world"
[ 4142.492208] rust_print: [rust_print_main.rs:35:5] c = "hello, world"
[ 4142.492213] rust_print: Arc<dyn Display> says 42
[ 4142.492214] rust_print: Arc<dyn Display> says hello, world
# dmesg | tail -n 50
[    3.419913] systemd[1]: modprobe at drm.service: Deactivated successfully.
[    3.420056] systemd[1]: Finished Load Kernel Module drm.
[    3.420405] systemd[1]: Finished Read and set NIS domainname from /etc/sysconfig/network.
[    3.420694] systemd[1]: Finished Generate network units from Kernel command line.
[    3.422214] systemd[1]: Mounting Kernel Configuration File System...
[    3.423543] systemd[1]: Finished Apply Kernel Variables.
[    3.424011] systemd[1]: Mounted Kernel Configuration File System.
[    3.430589] systemd[1]: Started Journal Service.
[    3.477706] fuse: init (API version 7.45)
[    3.548678] EXT4-fs (sda3): re-mounted 78691517-64fe-451b-9009-14359b774643 r/w.
[    3.556791] systemd-journald[640]: Received client request to flush runtime journal.
[    3.681167] Adding 10485696k swap on /dev/sda2.  Priority:-1 extents:1 across:10485696k SS
[    3.693490] pseries_rng: Registering IBM pSeries RNG driver
[    3.693904] cryptd: max_cpu_qlen set to 1000
[    4.702590] RPC: Registered named UNIX socket transport module.
[    4.702604] RPC: Registered udp transport module.
[    4.702607] RPC: Registered tcp transport module.
[    4.702609] RPC: Registered tcp-with-tls transport module.
[    4.702612] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    6.701147] block sda: the capability attribute has been deprecated.
[   10.150485] fbcon: Taking over console
[   39.532119] rust_minimal: loading out-of-tree module taints kernel.
[   39.532132] rust_minimal: module verification failed: signature and/or required key missing - tainting kernel
[   39.532856] rust_minimal: Rust minimal sample (init)
[   39.532860] rust_minimal: Am I built-in? false
[   39.532864] rust_minimal: test_parameter: 1
[ 4125.461822] rust_minimal: My numbers are [72, 108, 200]
[ 4125.461839] rust_minimal: Rust minimal sample (exit)
[ 4142.492146] rust_print: Rust printing macros sample (init)
[ 4142.492158] rust_print: Emergency message (level 0) without args
[ 4142.492161] rust_print: Alert message (level 1) without args
[ 4142.492163] rust_print: Critical message (level 2) without args
[ 4142.492166] rust_print: Error message (level 3) without args
[ 4142.492169] rust_print: Warning message (level 4) without args
[ 4142.492171] rust_print: Notice message (level 5) without args
[ 4142.492174] rust_print: Info message (level 6) without args
[ 4142.492176] rust_print: A line that is continued without args
[ 4142.492181] rust_print: Emergency message (level 0) with args
[ 4142.492185] rust_print: Alert message (level 1) with args
[ 4142.492188] rust_print: Critical message (level 2) with args
[ 4142.492190] rust_print: Error message (level 3) with args
[ 4142.492193] rust_print: Warning message (level 4) with args
[ 4142.492195] rust_print: Notice message (level 5) with args
[ 4142.492197] rust_print: Info message (level 6) with args
[ 4142.492200] rust_print: A line that is continued with args
[ 4142.492205] rust_print: 1
[ 4142.492206] rust_print: "hello, world"
[ 4142.492208] rust_print: [rust_print_main.rs:35:5] c = "hello, world"
[ 4142.492213] rust_print: Arc<dyn Display> says 42
[ 4142.492214] rust_print: Arc<dyn Display> says hello, world
# sudo rmmod rust_print
[ 4142.492217] rust_print: "hello, world"
[ 4153.334714] rust_print: Rust printing macros sample (exit)

# sudo rmmod rust_debugfs

Regards,
Venkat.


More information about the Linuxppc-dev mailing list