From: "Gary Guo" <gary@garyguo.net>
To: "Jan Polensky" <japo@linux.ibm.com>, <hca@linux.ibm.com>,
<gor@linux.ibm.com>, <agordeev@linux.ibm.com>, <ojeda@kernel.org>,
<peterz@infradead.org>, <jpoimboe@kernel.org>,
<jbaron@akamai.com>, <aliceryhl@google.com>
Cc: <borntraeger@linux.ibm.com>, <svens@linux.ibm.com>,
<boqun@kernel.org>, <gary@garyguo.net>,
<bjorn3_gh@protonmail.com>, <lossin@kernel.org>,
<a.hindborg@kernel.org>, <tmgross@umich.edu>, <dakr@kernel.org>,
<rostedt@goodmis.org>, <ardb@kernel.org>,
<linux-s390@vger.kernel.org>, <rust-for-linux@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 6/6] s390: Enable Rust support
Date: Mon, 08 Jun 2026 19:25:06 +0100 [thread overview]
Message-ID: <DJ3VN4EYXCUA.18YA9379UHT5Z@garyguo.net> (raw)
In-Reply-To: <20260608181451.3734956-7-japo@linux.ibm.com>
On Mon Jun 8, 2026 at 7:14 PM BST, Jan Polensky wrote:
> Enable building Rust code on s390 by wiring the architecture into the
> kernel Rust infrastructure.
>
> Add s390 to the Rust arch support documentation, provide the s390 Rust
> target and required compiler flags, and set the bindgen target for
> arch/s390. Adjust the Rust target generation and minimum rustc version
> gating so the s390 setup is handled explicitly.
>
> The Rust toolchain uses the "s390x" triple naming for the 64 bit target.
>
> Rust support is currently incompatible with CONFIG_EXPOLINE, which
> relies on compiler support for the -mindirect-branch= and
> -mfunction_return= options. Therefore, select HAVE_RUST only when
> EXPOLINE is disabled.
Does `-Zretpoline-external-thunk`/`-Zretpoline` not work for s390? Rust will
throw a warning saying that it doesn't recognize this for the target, but it
looks like it does generate target features
+retpoline-external-thunk,+retpoline-indirect-branches,+retpoline-indirect-calls
in LLVM IR.
Best,
Gary
>
> Acked-by: Miguel Ojeda <ojeda@kernel.org>
> Acked-by: Heiko Carstens <hca@linux.ibm.com>
> Signed-off-by: Jan Polensky <japo@linux.ibm.com>
> ---
> Documentation/rust/arch-support.rst | 1 +
> arch/s390/Kconfig | 1 +
> arch/s390/Makefile | 28 +++++++++++++++++-----------
> rust/Makefile | 1 +
> scripts/generate_rust_target.rs | 2 ++
> scripts/min-tool-version.sh | 6 +++++-
> 6 files changed, 27 insertions(+), 12 deletions(-)
>
> diff --git a/Documentation/rust/arch-support.rst b/Documentation/rust/arch-support.rst
> index 6e6a515d0899..4f980815e92a 100644
> --- a/Documentation/rust/arch-support.rst
> +++ b/Documentation/rust/arch-support.rst
> @@ -19,6 +19,7 @@ Architecture Level of support Constraints
> ``arm64`` Maintained Little Endian only.
> ``loongarch`` Maintained \-
> ``riscv`` Maintained ``riscv64`` and LLVM/Clang only.
> +``s390`` Maintained ``CONFIG_EXPOLINE`` must be disabled.
> ``um`` Maintained \-
> ``x86`` Maintained ``x86_64`` only.
> ============= ================ ==============================================
> diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
> index ecbcbb781e40..26951781d74d 100644
> --- a/arch/s390/Kconfig
> +++ b/arch/s390/Kconfig
> @@ -248,6 +248,7 @@ config S390
> select HAVE_RELIABLE_STACKTRACE
> select HAVE_RETHOOK
> select HAVE_RSEQ
> + select HAVE_RUST if !EXPOLINE
> select HAVE_SAMPLE_FTRACE_DIRECT
> select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
> select HAVE_SETUP_PER_CPU_AREA
> diff --git a/arch/s390/Makefile b/arch/s390/Makefile
> index 297976b41088..8b712cd85fcd 100644
> --- a/arch/s390/Makefile
> +++ b/arch/s390/Makefile
> @@ -35,25 +35,31 @@ KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
> KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
> KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
>
> +KBUILD_RUSTFLAGS += --target=s390x-unknown-none-softfloat -Zpacked-stack -Ctarget-feature=+backchain
> +
> UTS_MACHINE := s390x
> STACK_SIZE := $(if $(CONFIG_KASAN),65536,$(if $(CONFIG_KMSAN),65536,16384))
> CHECKFLAGS += -D__s390__ -D__s390x__
>
> export LD_BFD
>
> -mflags-$(CONFIG_MARCH_Z10) := -march=z10
> -mflags-$(CONFIG_MARCH_Z196) := -march=z196
> -mflags-$(CONFIG_MARCH_ZEC12) := -march=zEC12
> -mflags-$(CONFIG_MARCH_Z13) := -march=z13
> -mflags-$(CONFIG_MARCH_Z14) := -march=z14
> -mflags-$(CONFIG_MARCH_Z15) := -march=z15
> -mflags-$(CONFIG_MARCH_Z16) := -march=z16
> -mflags-$(CONFIG_MARCH_Z17) := -march=z17
> +march-name-$(CONFIG_MARCH_Z10) := z10
> +march-name-$(CONFIG_MARCH_Z196) := z196
> +march-name-$(CONFIG_MARCH_ZEC12) := zEC12
> +march-name-$(CONFIG_MARCH_Z13) := z13
> +march-name-$(CONFIG_MARCH_Z14) := z14
> +march-name-$(CONFIG_MARCH_Z15) := z15
> +march-name-$(CONFIG_MARCH_Z16) := z16
> +march-name-$(CONFIG_MARCH_Z17) := z17
>
> -export CC_FLAGS_MARCH := $(mflags-y)
> +mflags := -march=$(march-name-y)
>
> -aflags-y += $(mflags-y)
> -cflags-y += $(mflags-y)
> +export CC_FLAGS_MARCH := $(mflags)
> +
> +aflags-y += $(mflags)
> +cflags-y += $(mflags)
> +
> +KBUILD_RUSTFLAGS += -Ctarget-cpu=$(march-name-y)
>
> cflags-$(CONFIG_MARCH_Z10_TUNE) += -mtune=z10
> cflags-$(CONFIG_MARCH_Z196_TUNE) += -mtune=z196
> diff --git a/rust/Makefile b/rust/Makefile
> index b9e9f512cec3..77460502f576 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -403,6 +403,7 @@ BINDGEN_TARGET_x86 := x86_64-linux-gnu
> BINDGEN_TARGET_arm64 := aarch64-linux-gnu
> BINDGEN_TARGET_arm := arm-linux-gnueabi
> BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
> +BINDGEN_TARGET_s390 := s390x-linux-gnu
> # This is only for i386 UM builds, which need the 32-bit target not -m32
> BINDGEN_TARGET_i386 := i386-linux-gnu
> BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
> diff --git a/scripts/generate_rust_target.rs b/scripts/generate_rust_target.rs
> index 16f7e855e012..3bf296581a88 100644
> --- a/scripts/generate_rust_target.rs
> +++ b/scripts/generate_rust_target.rs
> @@ -260,6 +260,8 @@ fn main() {
> }
> } else if cfg.has("LOONGARCH") {
> panic!("loongarch uses the builtin rustc loongarch64-unknown-none-softfloat target");
> + } else if cfg.has("S390") {
> + panic!("s390 uses the builtin rustc s390x-unknown-none-softfloat target");
> } else {
> panic!("Unsupported architecture");
> }
> diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
> index b96ec2d379b6..296acf8f71aa 100755
> --- a/scripts/min-tool-version.sh
> +++ b/scripts/min-tool-version.sh
> @@ -31,7 +31,11 @@ llvm)
> fi
> ;;
> rustc)
> - echo 1.85.0
> + if [ "$SRCARCH" = "s390" ]; then
> + echo 1.96.0
> + else
> + echo 1.85.0
> + fi
> ;;
> bindgen)
> echo 0.71.1
next prev parent reply other threads:[~2026-06-08 18:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-08 18:14 [PATCH v6 0/6] s390: Enable Rust support and add required arch glue Jan Polensky
2026-06-08 18:14 ` [PATCH v6 1/6] s390/bug: Provide ARCH_WARN_ASM for Rust WARN/BUG support Jan Polensky
2026-06-08 18:14 ` [PATCH v6 2/6] s390/jump_label: Implement ARCH_STATIC_BRANCH_JUMP_ASM and ARCH_STATIC_BRANCH_ASM macros Jan Polensky
2026-06-08 18:14 ` [PATCH v6 3/6] rust/bindgen_parameters: Mark s390 types as opaque to prevent repr conflicts Jan Polensky
2026-06-08 18:14 ` [PATCH v6 4/6] rust: helpers: Add memchr wrapper for string operations Jan Polensky
2026-06-08 18:14 ` [PATCH v6 5/6] s390/cmpxchg: Fix KASAN stack-out-of-bounds in atomic helpers Jan Polensky
2026-06-08 18:14 ` [PATCH v6 6/6] s390: Enable Rust support Jan Polensky
2026-06-08 18:25 ` Gary Guo [this message]
2026-06-08 19:45 ` Jan Polensky
2026-06-09 13:51 ` Alexander Gordeev
2026-06-09 14:00 ` Gary Guo
2026-06-15 16:40 ` Nathan Chancellor
2026-06-15 16:45 ` Miguel Ojeda
2026-06-16 3:04 ` Nathan Chancellor
2026-06-16 7:39 ` Alice Ryhl
2026-06-16 8:45 ` Miguel Ojeda
2026-06-16 14:05 ` Jan Polensky
2026-06-16 14:22 ` Miguel Ojeda
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=DJ3VN4EYXCUA.18YA9379UHT5Z@garyguo.net \
--to=gary@garyguo.net \
--cc=a.hindborg@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=aliceryhl@google.com \
--cc=ardb@kernel.org \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=borntraeger@linux.ibm.com \
--cc=dakr@kernel.org \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=japo@linux.ibm.com \
--cc=jbaron@akamai.com \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=svens@linux.ibm.com \
--cc=tmgross@umich.edu \
/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