rust: bump minimum Rust and `bindgen` versions
Subsystems (16)
Miguel Ojeda
maintainercover rust: bump minimum Rust and `bindgen` versions
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian Trixie was released with bindgen 0.71.1, which it also still uses to this day [4].
Debian Trixie's release happened on 2025-08-09 [5], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new versions, i.e.
- Rust: 1.78.0 -> 1.85.0
- bindgen: 0.65.1 -> 0.71.1
There are a few main parts to the series, in this order:
- The Rust bump (and cleanups).
- The bindgen bump (and cleanups).
- Documentation updates.
- The cfi_encoding patch, added here, which needs the bump.
- The per-version flags support and a Clippy cleanup on top.
---
The cleanups should cover most of it -- there may be more we can do later e.g. in linux-next.
Most patches are optional, so if there are concerns with any, they can be dropped or be done later. Most are straightforward, though, and e.g. a couple of them update TODO comments to keep the series even simpler.
The patches have been split as much as possible to be able to add as much context as possible and to make it easier to review and to drop any if needed.
All in all, it is a nice --stat of deletions I think :)
Alice Ryhl (1):
rust: declare cfi_encoding for lru_status
Miguel Ojeda (32):
rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
rust: bump Clippy's MSRV and clean incompatible_msrv allows
rust: simplify RUSTC_VERSION Kconfig conditions
rust: remove RUSTC_HAS_SLICE_AS_FLATTENED and simplify code
rust: remove RUSTC_HAS_COERCE_POINTEE and simplify code
rust: kbuild: remove skipping of -Wrustdoc::unescaped_backticks
rust: kbuild: remove feature(...)s that are now stable
rust: kbuild: simplify --remap-path-prefix workaround
rust: kbuild: make --remap-path-prefix workaround conditional
rust: transmute: simplify code with Rust 1.80.0 split_at_*checked()
rust: alloc: simplify with NonNull::add() now that it is stable
rust: macros: update extract_if MSRV TODO comment
rust: block: update const_refs_to_static MSRV TODO comment
rust: bump bindgen minimum supported version to 0.71.1 (Debian
Trixie)
rust: rust_is_available: remove warning for 0.66.[01] buggy versions
rust: rust_is_available: remove warning for < 0.69.5 && libclang >=
19.1
rust: kbuild: update `bindgen --rust-target` version and replace
comment
rust: kbuild: remove "dummy parameter" workaround for `bindgen` <
0.71.1 rust: kbuild: remove "try keyword" workaround for bindgen < 0.59.2
rust: kbuild: remove unneeded old allows for generated layout tests
gpu: nova-core: bindings: remove unneeded cfg_attr
docs: rust: quick-start: openSUSE provides rust-src package nowadays
docs: rust: quick-start: update Ubuntu versioned packages
docs: rust: quick-start: update minimum Ubuntu version
docs: rust: quick-start: add Ubuntu 26.04 LTS and remove subsection
title
docs: rust: quick-start: remove Gentoo "testing" note
docs: rust: quick-start: remove Nix "unstable channel" note
docs: rust: quick-start: remove GDB/Binutils mention
docs: rust: general-information: simplify Kconfig example
docs: rust: general-information: use real example
rust: kbuild: support global per-version flags
rust: kbuild: allow clippy::precedence for Rust < 1.86.0
.clippy.toml | 2 +- Documentation/process/changes.rst | 4 +- Documentation/rust/general-information.rst | 4 +- Documentation/rust/quick-start.rst | 52 +++++++---------- Makefile | 9 +++ arch/Kconfig | 3 +- arch/arm64/Kconfig | 8 --- arch/riscv/Kconfig | 3 - drivers/android/binder/Makefile | 3 +- drivers/android/binder/page_range.rs | 6 +- drivers/android/binder/page_range_helper.c | 24 -------- drivers/android/binder/page_range_helper.h | 15 ----- drivers/gpu/nova-core/gsp/cmdq.rs | 6 +- drivers/gpu/nova-core/gsp/fw/r570_144.rs | 3 - init/Kconfig | 15 +---- rust/Makefile | 36 ++++-------- rust/bindgen_parameters | 8 +-- rust/bindings/bindings_helper.h | 1 - rust/bindings/lib.rs | 5 +- rust/kernel/alloc/allocator/iter.rs | 8 +-- rust/kernel/alloc/kbox.rs | 29 +--------- rust/kernel/block/mq/gen_disk.rs | 4 +- rust/kernel/lib.rs | 30 +--------- rust/kernel/list/arc.rs | 22 +------ rust/kernel/prelude.rs | 3 - rust/kernel/ptr.rs | 1 - rust/kernel/slice.rs | 49 ---------------- rust/kernel/sync/arc.rs | 21 +------ rust/kernel/transmute.rs | 35 ++--------- rust/macros/kunit.rs | 2 +- rust/uapi/lib.rs | 5 +- scripts/Makefile.build | 6 +- scripts/min-tool-version.sh | 4 +- scripts/rust_is_available.sh | 36 +----------- scripts/rust_is_available_bindgen_0_66.h | 2 - ...ust_is_available_bindgen_libclang_concat.h | 3 - scripts/rust_is_available_test.py | 58 +------------------ 37 files changed, 79 insertions(+), 446 deletions(-) delete mode 100644 drivers/android/binder/page_range_helper.c delete mode 100644 drivers/android/binder/page_range_helper.h delete mode 100644 rust/kernel/slice.rs delete mode 100644 scripts/rust_is_available_bindgen_0_66.h delete mode 100644 scripts/rust_is_available_bindgen_libclang_concat.h
--
2.53.0
Miguel Ojeda
maintainerPATCH 1/33 rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian Trixie's release happened on 2025-08-09 [4], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
pin-init was left as-is since the patches come from upstream. And the vendored crates are unmodified, since we do not want to change those.
Note that the minimum LLVM major version for Rust 1.85.0 is LLVM 18 (the Rust upstream binaries use LLVM 19.1.7), thus e.g. RUSTC_LLVM_VERSION tests can also be updated, but there are no suitable ones to simplify.
Ubuntu 25.10 also has a recent enough Rust toolchain [5], and they also provide versioned packages with a Rust 1.85.1 toolchain even back to Ubuntu 22.04 LTS [6].
--- Documentation/process/changes.rst | 2 +- scripts/min-tool-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/process/changes.rst +1 -1
@@ -31,7 +31,7 @@ you probably needn't concern yourself with pcmciautils. ====================== =============== ======================================== GNU C 8.1 gcc --version Clang/LLVM (optional) 15.0.0 clang --version -Rust (optional) 1.78.0 rustc --version +Rust (optional) 1.85.0 rustc --version bindgen (optional) 0.65.1 bindgen --version GNU make 4.0 make --version bash 4.2 bash --version
scripts/min-tool-version.sh +1 -1
@@ -31,7 +31,7 @@ llvm) fi ;; rustc) - echo 1.78.0 + echo 1.85.0 ;; bindgen) echo 0.65.1
Signature · 1 line
2.53.0
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
Quoted 6 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian really *should* pick up 1.85.1. It contains bugfixes serious enough that the Rust team decided it was reasonble to release a point release.
Quoted 20 lines
Debian Trixie's release happened on 2025-08-09 [4], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
pin-init was left as-is since the patches come from upstream. And the vendored crates are unmodified, since we do not want to change those.
Note that the minimum LLVM major version for Rust 1.85.0 is LLVM 18 (the Rust upstream binaries use LLVM 19.1.7), thus e.g.
RUSTC_LLVM_VERSIONtests can also be updated, but there are no suitable ones to simplify.Ubuntu 25.10 also has a recent enough Rust toolchain [5], and they also provide versioned packages with a Rust 1.85.1 toolchain even back to Ubuntu 22.04 LTS [6].
Quoted 7 lines
Link https://lwn.net/Articles/1050174/ [1]Signed-off-by Miguel Ojeda <[email protected]>
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
Quoted 4 lines · Alice Ryhl
Debian really *should* pick up 1.85.1. It contains bugfixes serious enough that the Rust team decided it was reasonble to release a point release.
I asked them about their policy yesterday here:
https://lore.kernel.org/rust-for-linux/[email protected]/
Perhaps they just prefer to apply patches on top.
The issue linked above is the only one I noticed so far, and it is quite specific.
Anyway, it is up to them.
Cheers,
Miguel
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
In reply to Miguel OjedaQuoted 27 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian Trixie's release happened on 2025-08-09 [4], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
pin-init was left as-is since the patches come from upstream. And the vendored crates are unmodified, since we do not want to change those.
Note that the minimum LLVM major version for Rust 1.85.0 is LLVM 18 (the Rust upstream binaries use LLVM 19.1.7), thus e.g.
RUSTC_LLVM_VERSIONtests can also be updated, but there are no suitable ones to simplify.Ubuntu 25.10 also has a recent enough Rust toolchain [5], and they also provide versioned packages with a Rust 1.85.1 toolchain even back to Ubuntu 22.04 LTS [6].
Quoted 7 lines
Link https://lwn.net/Articles/1050174/ [1]Signed-off-by Miguel Ojeda <[email protected]>
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
In reply to Miguel OjedaQuoted 27 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian Trixie's release happened on 2025-08-09 [4], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
pin-init was left as-is since the patches come from upstream. And the vendored crates are unmodified, since we do not want to change those.
Note that the minimum LLVM major version for Rust 1.85.0 is LLVM 18 (the Rust upstream binaries use LLVM 19.1.7), thus e.g.
RUSTC_LLVM_VERSIONtests can also be updated, but there are no suitable ones to simplify.Ubuntu 25.10 also has a recent enough Rust toolchain [5], and they also provide versioned packages with a Rust 1.85.1 toolchain even back to Ubuntu 22.04 LTS [6].
Quoted 7 lines
Link https://lwn.net/Articles/1050174/ [1]Signed-off-by Miguel Ojeda <[email protected]>
Quoted 4 lines
--- Documentation/process/changes.rst | 2 +- scripts/min-tool-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Gary Guo
maintainerRe: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
In reply to Miguel OjedaDocumentation/process/changes.rst
Quoted 43 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian Trixie's release happened on 2025-08-09 [4], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
pin-init was left as-is since the patches come from upstream. And the vendored crates are unmodified, since we do not want to change those.
Note that the minimum LLVM major version for Rust 1.85.0 is LLVM 18 (the Rust upstream binaries use LLVM 19.1.7), thus e.g.
RUSTC_LLVM_VERSIONtests can also be updated, but there are no suitable ones to simplify.Ubuntu 25.10 also has a recent enough Rust toolchain [5], and they also provide versioned packages with a Rust 1.85.1 toolchain even back to Ubuntu 22.04 LTS [6].
Link https://lwn.net/Articles/1050174/ [1]Signed-off-by Miguel Ojeda <[email protected]>--- Documentation/process/changes.rst | 2 +- scripts/min-tool-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)Documentation/process/changes.rst +0
-0
This diff fails to apply on linux-next, due to conflict with ece7e57afd51 ("docs: changes.rst and ver_linux: sort the lists").
Best,
Gary
Quoted 22 lines
Documentation/process/changes.rst +1
-1@@ -31,7 +31,7 @@ you probably needn't concern yourself with pcmciautils. ====================== =============== ======================================== GNU C 8.1 gcc --version Clang/LLVM (optional) 15.0.0 clang --version -Rust (optional) 1.78.0 rustc --version +Rust (optional) 1.85.0 rustc --version bindgen (optional) 0.65.1 bindgen --version GNU make 4.0 make --version bash 4.2 bash --versionscripts/min-tool-version.sh +1
-1@@ -31,7 +31,7 @@ llvm) fi ;; rustc) - echo 1.78.0 + echo 1.85.0 ;; bindgen) echo 0.65.1
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
Quoted 3 lines · Gary Guo
This diff fails to apply on linux-next, due to conflict with
ece7e57afd51("docs:changes.rstandver_linux: sort the lists").
Yeah, sorry, I should have added --base-commit -- it is rust-next, i.e. 3a2486cc1da5 ("kbuild: rust: provide an option to inline C helpers into Rust").
There will be other conflicts too, e.g. in the list of features in scripts/Makefile.build.
Cheers,
Miguel
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
In reply to Miguel OjedaQuoted 27 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
Debian Trixie's release happened on 2025-08-09 [4], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
pin-init was left as-is since the patches come from upstream. And the vendored crates are unmodified, since we do not want to change those.
Note that the minimum LLVM major version for Rust 1.85.0 is LLVM 18 (the Rust upstream binaries use LLVM 19.1.7), thus e.g.
RUSTC_LLVM_VERSIONtests can also be updated, but there are no suitable ones to simplify.Ubuntu 25.10 also has a recent enough Rust toolchain [5], and they also provide versioned packages with a Rust 1.85.1 toolchain even back to Ubuntu 22.04 LTS [6].
Quoted 7 lines
Link https://lwn.net/Articles/1050174/ [1]Signed-off-by Miguel Ojeda <[email protected]>
Very happy to see this!
Cheers,
Benno
Quoted 4 lines
--- Documentation/process/changes.rst | 2 +- scripts/min-tool-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Re: [PATCH 01/33] rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
In reply to Miguel OjedaQuoted 8 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's Rust versions as our minimum supported version.
Debian Trixie was released with a Rust 1.85.0 toolchain [2], which it still uses to this day [3] (i.e. no update to Rust 1.85.1).
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 2/33 rust: bump Clippy's MSRV and clean `incompatible_msrv` allows
In reply to Miguel OjedaFollowing the Rust compiler bump, we can now update Clippy's MSRV we set in the configuration, which will improve the diagnostics it generates.
Thus do so and clean a few of the allows that are not needed anymore.
--- .clippy.toml | 2 +- drivers/gpu/nova-core/gsp/cmdq.rs | 6 +----- rust/kernel/ptr.rs | 1 - rust/kernel/transmute.rs | 2 -- 4 files changed, 2 insertions(+), 9 deletions(-)
.clippy.toml +1 -1
@@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 -msrv = "1.78.0" +msrv = "1.85.0" check-private-items = true
drivers/gpu/nova-core/gsp/cmdq.rs +1 -5
@@ -281,7 +281,6 @@ fn allocate_command(&mut self, size: usize) -> Result<GspCommand<'_>> {let (slice_1, slice_2) = {let (slice_1, slice_2) = self.driver_write_area (); -#[allow(clippy::incompatible_msrv)] (slice_1.as_flattened_mut (), slice_2.as_flattened_mut ()) };
@@ -572,10 +571,7 @@ fn wait_for_msg(&self, timeout: Delta) -> Result<GspMessage<'_>> { Delta::from_millis(1), timeout, ) - .map (|(slice_1, slice_2)| { -#[allow(clippy::incompatible_msrv)] - (slice_1.as_flattened (), slice_2.as_flattened ()) - })?; + .map (|(slice_1, slice_2)| (slice_1.as_flattened (), slice_2.as_flattened ()))?;// Extract the `GspMsgElement`. let (header, slice_1) =GspMsgElement ::from_bytes_prefix (slice_1).ok_or (EIO )?;
rust/kernel/ptr.rs +0 -1
@@ -81,7 +81,6 @@ pub const fn new_checked(align: usize) -> Option<Self> {/// This is equivalent to [`align_of`], but with the return value provided as an [`Alignment`]. #[inline(always)] pub const fn of <T >() ->Self { -#![allow(clippy::incompatible_msrv)] // This cannot panic since alignments are always powers of two. // // We unfortunately cannot use `new` as it would require the `generic_const_exprs` feature.
rust/kernel/transmute.rs +0 -2
@@ -49,7 +49,6 @@ fn from_bytes(bytes: &[u8]) -> Option<&Self>let slice_ptr = bytes.as_ptr ().cast ::<Self >();let size =size_of ::<Self >(); -#[allow(clippy::incompatible_msrv)] if bytes.len () == size && slice_ptr.is_aligned () {// SAFETY: Size and alignment were just checked. unsafe {Some (&*slice_ptr) }
@@ -92,7 +91,6 @@ fn from_bytes_mut(bytes: &mut [u8]) -> Option<&mut Self>let slice_ptr = bytes.as_mut_ptr ().cast ::<Self >();let size =size_of ::<Self >(); -#[allow(clippy::incompatible_msrv)] if bytes.len () == size && slice_ptr.is_aligned () {// SAFETY: Size and alignment were just checked. unsafe {Some (&mut *slice_ptr) }
Signature · 1 line
2.53.0
Re: [PATCH 02/33] rust: bump Clippy's MSRV and clean `incompatible_msrv` allows
Quoted 6 lines · Miguel Ojeda
Following the Rust compiler bump, we can now update Clippy's MSRV we set in the configuration, which will improve the diagnostics it generates.
Thus do so and clean a few of the
allows that are not needed anymore.Signed-off-by Miguel Ojeda <[email protected]>
Quoted 6 lines
--- .clippy.toml | 2 +- drivers/gpu/nova-core/gsp/cmdq.rs | 6 +----- rust/kernel/ptr.rs | 1 - rust/kernel/transmute.rs | 2 -- 4 files changed, 2 insertions(+), 9 deletions(-)
Re: [PATCH 02/33] rust: bump Clippy's MSRV and clean `incompatible_msrv` allows
In reply to Miguel OjedaQuoted 1 line · Miguel Ojeda
drivers/gpu/nova-core/gsp/cmdq.rs | 6 +-----
Re: [PATCH 02/33] rust: bump Clippy's MSRV and clean `incompatible_msrv` allows
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
Following the Rust compiler bump, we can now update Clippy's MSRV we set in the configuration, which will improve the diagnostics it generates.
Thus do so and clean a few of the
allows that are not needed anymore.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 3/33 rust: simplify `RUSTC_VERSION` Kconfig conditions
In reply to Miguel OjedaWith the Rust version bump in place, several Kconfig conditions based on RUSTC_VERSION are always true.
Thus simplify them.
The minimum supported major LLVM version by our new Rust minimum version is now LLVM 18, instead of LLVM 16. However, there are no possible cleanups for RUSTC_LLVM_VERSION.
--- arch/Kconfig | 3 +-- arch/arm64/Kconfig | 8 -------- arch/riscv/Kconfig | 3 --- init/Kconfig | 2 -- 4 files changed, 1 insertion(+), 15 deletions(-)
arch/Kconfig +1 -2
@@ -968,10 +968,9 @@ config HAVE_CFI_ICALL_NORMALIZE_INTEGERS config HAVE_CFI_ICALL_NORMALIZE_INTEGERS_RUSTC def_bool y depends on HAVE_CFI_ICALL_NORMALIZE_INTEGERS - depends on RUSTC_VERSION >= 107900 depends on ARM64 || X86_64 # With GCOV/KASAN we need this fix: https://github.com/rust-lang/rust/pull/129373 - depends on (RUSTC_LLVM_VERSION >= 190103 && RUSTC_VERSION >= 108200) || \ + depends on RUSTC_LLVM_VERSION >= 190103 || \ (!GCOV_KERNEL && !KASAN_GENERIC && !KASAN_SW_TAGS) config CFI_PERMISSIVE
arch/arm64/Kconfig +0 -8
@@ -291,14 +291,6 @@ config ARM64 config RUSTC_SUPPORTS_ARM64 def_bool y depends on CPU_LITTLE_ENDIAN - # Shadow call stack is only supported on certain rustc versions. - # - # When using the UNWIND_PATCH_PAC_INTO_SCS option, rustc version 1.80+ is - # required due to use of the -Zfixed-x18 flag. - # - # Otherwise, rustc version 1.82+ is required due to use of the - # -Zsanitizer=shadow-call-stack flag. - depends on !SHADOW_CALL_STACK || RUSTC_VERSION >= 108200 || RUSTC_VERSION >= 108000 && UNWIND_PATCH_PAC_INTO_SCS config CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS def_bool CC_IS_CLANG
arch/riscv/Kconfig +0 -3
@@ -232,9 +232,6 @@ config RISCV config RUSTC_SUPPORTS_RISCV def_bool y depends on 64BIT - # Shadow call stack requires rustc version 1.82+ due to use of the - # -Zsanitizer=shadow-call-stack flag. - depends on !SHADOW_CALL_STACK || RUSTC_VERSION >= 108200 config CLANG_SUPPORTS_DYNAMIC_FTRACE def_bool CC_IS_CLANG
init/Kconfig +0 -2
@@ -2193,9 +2193,7 @@ config RUST depends on !DEBUG_INFO_BTF || (PAHOLE_HAS_LANG_EXCLUDE && !LTO) depends on !CFI || HAVE_CFI_ICALL_NORMALIZE_INTEGERS_RUSTC select CFI_ICALL_NORMALIZE_INTEGERS if CFI - depends on !CALL_PADDING || RUSTC_VERSION >= 108100 depends on !KASAN_SW_TAGS - depends on !(MITIGATION_RETHUNK && KASAN) || RUSTC_VERSION >= 108300 help Enables Rust support in the kernel.
Signature · 1 line
2.53.0
Re: [PATCH 03/33] rust: simplify `RUSTC_VERSION` Kconfig conditions
Quoted 10 lines · Miguel Ojeda
With the Rust version bump in place, several
Kconfigconditions based onRUSTC_VERSIONare always true.Thus simplify them.
The minimum supported major LLVM version by our new Rust minimum version is now LLVM 18, instead of LLVM 16. However, there are no possible cleanups for
RUSTC_LLVM_VERSION.Signed-off-by Miguel Ojeda <[email protected]>
Quoted 6 lines
--- arch/Kconfig | 3 +-- arch/arm64/Kconfig | 8 -------- arch/riscv/Kconfig | 3 --- init/Kconfig | 2 -- 4 files changed, 1 insertion(+), 15 deletions(-)
Re: [PATCH 03/33] rust: simplify `RUSTC_VERSION` Kconfig conditions
In reply to Miguel OjedaQuoted 10 lines · Miguel Ojeda
With the Rust version bump in place, several
Kconfigconditions based onRUSTC_VERSIONare always true.Thus simplify them.
The minimum supported major LLVM version by our new Rust minimum version is now LLVM 18, instead of LLVM 16. However, there are no possible cleanups for
RUSTC_LLVM_VERSION.[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 4/33 rust: remove `RUSTC_HAS_SLICE_AS_FLATTENED` and simplify code
In reply to Miguel OjedaWith the Rust version bump in place, the RUSTC_HAS_SLICE_AS_FLATTENED Kconfig (automatic) option is always true.
Thus remove the option and simplify the code.
In particular, this includes removing the slice module which contained the temporary slice helpers, i.e. the AsFlattened extension trait and its impls.
--- init/Kconfig | 3 --- rust/kernel/lib.rs | 1 - rust/kernel/prelude.rs | 3 --- rust/kernel/slice.rs | 49 ------------------------------------------ 4 files changed, 56 deletions(-) delete mode 100644 rust/kernel/slice.rs
init/Kconfig +0 -3
@@ -178,9 +178,6 @@ config LD_CAN_USE_KEEP_IN_OVERLAY # https://github.com/llvm/llvm-project/pull/130661 def_bool LD_IS_BFD || LLD_VERSION >= 210000 -config RUSTC_HAS_SLICE_AS_FLATTENED - def_bool RUSTC_VERSION >= 108000 - config RUSTC_HAS_COERCE_POINTEE def_bool RUSTC_VERSION >= 108400
rust/kernel/lib.rs +0 -1
@@ -140,7 +140,6 @@pub mod security;pub mod seq_file;pub mod sizes; -pub mod slice;#[cfg( CONFIG_SOC_BUS )] pub mod soc;#[doc(hidden)]
rust/kernel/prelude.rs +0 -3
@@ -53,6 +53,3 @@pub use super ::current;pub use super ::uaccess::UserPtr ; - -#[cfg(not( CONFIG_RUSTC_HAS_SLICE_AS_FLATTENED ))] -pub use super ::slice::AsFlattened ;
rust/kernel/slice.rs deleted +0 -49
49 lines not on this page · raw message
Signature · 1 line
2.53.0
Re: [PATCH 04/33] rust: remove `RUSTC_HAS_SLICE_AS_FLATTENED` and simplify code
Quoted 10 lines · Miguel Ojeda
With the Rust version bump in place, the
RUSTC_HAS_SLICE_AS_FLATTENEDKconfig(automatic) option is always true.Thus remove the option and simplify the code.
In particular, this includes removing the
slicemodule which contained the temporary slice helpers, i.e. theAsFlattenedextension trait and itsimpls.Signed-off-by Miguel Ojeda <[email protected]>
Quoted 7 lines
--- init/Kconfig | 3 --- rust/kernel/lib.rs | 1 - rust/kernel/prelude.rs | 3 --- rust/kernel/slice.rs | 49 ------------------------------------------ 4 files changed, 56 deletions(-) delete mode 100644 rust/kernel/slice.rs
Re: [PATCH 04/33] rust: remove `RUSTC_HAS_SLICE_AS_FLATTENED` and simplify code
In reply to Miguel OjedaQuoted 10 lines · Miguel Ojeda
With the Rust version bump in place, the
RUSTC_HAS_SLICE_AS_FLATTENEDKconfig(automatic) option is always true.Thus remove the option and simplify the code.
In particular, this includes removing the
slicemodule which contained the temporary slice helpers, i.e. theAsFlattenedextension trait and itsimpls.[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 5/33 rust: remove `RUSTC_HAS_COERCE_POINTEE` and simplify code
In reply to Miguel OjedaWith the Rust version bump in place, the RUSTC_HAS_COERCE_POINTEE Kconfig (automatic) option is always true.
Thus remove the option and simplify the code.
In particular, this includes removing our use of the predecessor unstable features we used with Rust < 1.84.0 (coerce_unsized, dispatch_from_dyn and unsize).
--- init/Kconfig | 3 --- rust/kernel/alloc/kbox.rs | 29 ++--------------------------- rust/kernel/lib.rs | 8 +------- rust/kernel/list/arc.rs | 22 +--------------------- rust/kernel/sync/arc.rs | 21 ++------------------- 5 files changed, 6 insertions(+), 77 deletions(-)
init/Kconfig +0 -3
@@ -178,9 +178,6 @@ config LD_CAN_USE_KEEP_IN_OVERLAY # https://github.com/llvm/llvm-project/pull/130661 def_bool LD_IS_BFD || LLD_VERSION >= 210000 -config RUSTC_HAS_COERCE_POINTEE - def_bool RUSTC_VERSION >= 108400 - config RUSTC_HAS_SPAN_FILE def_bool RUSTC_VERSION >= 108800
rust/kernel/alloc/kbox.rs +2 -27
@@ -77,33 +77,8 @@/// `self.0` is always properly aligned and either points to memory allocated with `A` or, for /// zero-sized types, is a dangling, well aligned pointer. #[repr(transparent)] -#[cfg_attr( CONFIG_RUSTC_HAS_COERCE_POINTEE , derive(core::marker:: CoercePointee ))] -pub struct Box <#[cfg_attr( CONFIG_RUSTC_HAS_COERCE_POINTEE , pointee)] T : ?Sized ,A :Allocator >( -NonNull <T >, -PhantomData <A >, -); - -// This is to allow coercion from `Box<T, A>` to `Box<U, A>` if `T` can be converted to the -// dynamically-sized type (DST) `U`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T ,U ,A > core::ops::CoerceUnsized <Box <U ,A >>for Box <T ,A > -where -T : ?Sized + core::marker::Unsize <U >, -U : ?Sized , -A :Allocator , -{ -} - -// This is to allow `Box<U, A>` to be dispatched on when `Box<T, A>` can be coerced into `Box<U, -// A>`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T ,U ,A > core::ops::DispatchFromDyn <Box <U ,A >>for Box <T ,A > -where -T : ?Sized + core::marker::Unsize <U >, -U : ?Sized , -A :Allocator , -{ -} +#[derive(core::marker:: CoercePointee )] +pub struct Box <#[pointee] T : ?Sized ,A :Allocator >(NonNull <T >,PhantomData <A >);/// Type alias for [`Box`] with a [`Kmalloc`] allocator. ///
rust/kernel/lib.rs +1 -7
@@ -39,17 +39,11 @@// // Expected to become stable. #![feature(arbitrary_self_types)] +#![feature(derive_coerce_pointee)] // // To be determined. #![feature(used_with_arg)] // -// `feature(derive_coerce_pointee)` is expected to become stable. Before Rust -// 1.84.0, it did not exist, so enable the predecessor features. -#![cfg_attr( CONFIG_RUSTC_HAS_COERCE_POINTEE , feature(derive_coerce_pointee))] -#![cfg_attr(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ), feature(coerce_unsized))] -#![cfg_attr(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ), feature(dispatch_from_dyn))] -#![cfg_attr(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ), feature(unsize))] -// // `feature(file_with_nul)` is expected to become stable. Before Rust 1.89.0, it did not exist, so // enable it conditionally. #![cfg_attr( CONFIG_RUSTC_HAS_FILE_WITH_NUL , feature(file_with_nul))]
rust/kernel/list/arc.rs +1 -21
@@ -160,7 +160,7 @@ fn try_new_list_arc(&self) -> bool {/// /// [`List`]: crate::list::List #[repr(transparent)] -#[cfg_attr( CONFIG_RUSTC_HAS_COERCE_POINTEE , derive(core::marker:: CoercePointee ))] +#[derive(core::marker:: CoercePointee )] pub struct ListArc <T ,const ID :u64 =0 > where T: ListArcSafe<ID> + ?Sized,
@@ -443,26 +443,6 @@ fn as_ref(&self) -> &Arc<T> { } } -// This is to allow coercion from `ListArc<T>` to `ListArc<U>` if `T` can be converted to the -// dynamically-sized type (DST) `U`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T ,U ,const ID :u64 > core::ops::CoerceUnsized <ListArc <U ,ID >>for ListArc <T ,ID > -where -T :ListArcSafe <ID > + core::marker::Unsize <U > + ?Sized , -U :ListArcSafe <ID > + ?Sized , -{ -} - -// This is to allow `ListArc<U>` to be dispatched on when `ListArc<T>` can be coerced into -// `ListArc<U>`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T ,U ,const ID :u64 > core::ops::DispatchFromDyn <ListArc <U ,ID >>for ListArc <T ,ID > -where -T :ListArcSafe <ID > + core::marker::Unsize <U > + ?Sized , -U :ListArcSafe <ID > + ?Sized , -{ -} -/// A utility for tracking whether a [`ListArc`] exists using an atomic. /// /// # Invariants
rust/kernel/sync/arc.rs +2 -19
@@ -128,7 +128,7 @@/// # Ok::<(), Error>(()) /// ``` #[repr(transparent)] -#[cfg_attr( CONFIG_RUSTC_HAS_COERCE_POINTEE , derive(core::marker:: CoercePointee ))] +#[derive(core::marker:: CoercePointee )] pub struct Arc <T : ?Sized > { ptr:NonNull <ArcInner <T >>,// NB: this informs dropck that objects of type `ArcInner<T>` may be used in `<Arc<T> as
@@ -182,15 +182,6 @@ unsafe fn container_of(ptr: *const T) -> NonNull<ArcInner<T>> { } } -// This is to allow coercion from `Arc<T>` to `Arc<U>` if `T` can be converted to the -// dynamically-sized type (DST) `U`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T : ?Sized + core::marker::Unsize <U >,U : ?Sized > core::ops::CoerceUnsized <Arc <U >>for Arc <T > {} - -// This is to allow `Arc<U>` to be dispatched on when `Arc<T>` can be coerced into `Arc<U>`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T : ?Sized + core::marker::Unsize <U >,U : ?Sized > core::ops::DispatchFromDyn <Arc <U >>for Arc <T > {} -// SAFETY: It is safe to send `Arc<T>` to another thread when the underlying `T` is `Sync` because // it effectively means sharing `&T` (which is safe because `T` is `Sync`); additionally, it needs // `T` to be `Send` because any thread that has an `Arc<T>` may ultimately access `T` using a
@@ -547,20 +538,12 @@ fn from(item: Pin<UniqueArc<T>>) -> Self {/// # Ok::<(), Error>(()) /// ``` #[repr(transparent)] -#[cfg_attr( CONFIG_RUSTC_HAS_COERCE_POINTEE , derive(core::marker:: CoercePointee ))] +#[derive(core::marker:: CoercePointee )] pub struct ArcBorrow <'a,T : ?Sized + 'a> { inner:NonNull <ArcInner <T >>, _p:PhantomData <&'a ()>, } -// This is to allow `ArcBorrow<U>` to be dispatched on when `ArcBorrow<T>` can be coerced into -// `ArcBorrow<U>`. -#[cfg(not( CONFIG_RUSTC_HAS_COERCE_POINTEE ))] -impl <T : ?Sized + core::marker::Unsize <U >,U : ?Sized > core::ops::DispatchFromDyn <ArcBorrow <'_,U >> -for ArcBorrow <'_,T > -{ -} -impl <T : ?Sized >Clone for ArcBorrow <'_,T > {fn clone (&self) ->Self { *self
Signature · 1 line
2.53.0
Re: [PATCH 05/33] rust: remove `RUSTC_HAS_COERCE_POINTEE` and simplify code
Quoted 10 lines · Miguel Ojeda
With the Rust version bump in place, the
RUSTC_HAS_COERCE_POINTEEKconfig(automatic) option is always true.Thus remove the option and simplify the code.
In particular, this includes removing our use of the predecessor unstable features we used with Rust < 1.84.0 (
coerce_unsized,dispatch_from_dynandunsize).Signed-off-by Miguel Ojeda <[email protected]>
Quoted 7 lines
--- init/Kconfig | 3 --- rust/kernel/alloc/kbox.rs | 29 ++--------------------------- rust/kernel/lib.rs | 8 +------- rust/kernel/list/arc.rs | 22 +--------------------- rust/kernel/sync/arc.rs | 21 ++------------------- 5 files changed, 6 insertions(+), 77 deletions(-)
Re: [PATCH 05/33] rust: remove `RUSTC_HAS_COERCE_POINTEE` and simplify code
In reply to Miguel OjedaQuoted 1 line · Miguel Ojeda
rust/kernel/alloc/kbox.rs | 29 ++---------------------------
Re: [PATCH 05/33] rust: remove `RUSTC_HAS_COERCE_POINTEE` and simplify code
In reply to Miguel OjedaQuoted 10 lines · Miguel Ojeda
With the Rust version bump in place, the
RUSTC_HAS_COERCE_POINTEEKconfig(automatic) option is always true.Thus remove the option and simplify the code.
In particular, this includes removing our use of the predecessor unstable features we used with Rust < 1.84.0 (
coerce_unsized,dispatch_from_dynandunsize).[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 6/33 rust: kbuild: remove skipping of `-Wrustdoc::unescaped_backticks`
In reply to Miguel OjedaBack in Rust 1.82.0, I cleaned the rustdoc::unescaped_backticks lint in upstream Rust and added tests so that hopefully it would not regress [1].
Thus we can remove it from our side given the Rust minimum version bump.
--- rust/Makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
rust/Makefile +1 -4
@@ -75,8 +75,7 @@ core-edition := $(if $(call rustc-min-version,108700),2024,2021) core-skip_flags := \ --edition=2021 \ - -Wunreachable_pub \ - -Wrustdoc::unescaped_backticks + -Wunreachable_pub core-flags := \ --edition=$(core-edition) \
@@ -213,8 +212,6 @@ rustdoc-macros: $(src)/macros/lib.rs rustdoc-clean rustdoc-proc_macro2 \ rustdoc-quote rustdoc-syn FORCE +$(call if_changed,rustdoc) -# Starting with Rust 1.82.0, skipping `-Wrustdoc::unescaped_backticks` should -# not be needed -- see https://github.com/rust-lang/rust/pull/128307. rustdoc-core: private skip_flags = $(core-skip_flags) rustdoc-core: private rustc_target_flags = $(core-flags) rustdoc-core: $(RUST_LIB_SRC)/core/src/lib.rs rustdoc-clean FORCE
Signature · 1 line
2.53.0
Re: [PATCH 06/33] rust: kbuild: remove skipping of `-Wrustdoc::unescaped_backticks`
Quoted 7 lines · Miguel Ojeda
Back in Rust 1.82.0, I cleaned the
rustdoc::unescaped_backtickslint in upstream Rust and added tests so that hopefully it would not regress [1].Thus we can remove it from our side given the Rust minimum version bump.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- rust/Makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
Re: [PATCH 06/33] rust: kbuild: remove skipping of `-Wrustdoc::unescaped_backticks`
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
Back in Rust 1.82.0, I cleaned the
rustdoc::unescaped_backtickslint in upstream Rust and added tests so that hopefully it would not regress [1].Thus we can remove it from our side given the Rust minimum version bump.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 7/33 rust: kbuild: remove `feature(...)`s that are now stable
In reply to Miguel OjedaNow that the Rust minimum version is 1.85.0, there is no need to enable certain features that are stable.
Thus clean them up.
--- rust/Makefile | 2 -- rust/kernel/lib.rs | 21 --------------------- scripts/Makefile.build | 6 +----- 3 files changed, 1 insertion(+), 28 deletions(-)
rust/Makefile +0 -2
@@ -86,10 +86,8 @@ proc_macro2-cfgs := \ wrap_proc_macro \ $(if $(call rustc-min-version,108800),proc_macro_span_file proc_macro_span_location) -# Stable since Rust 1.79.0: `feature(proc_macro_byte_character,proc_macro_c_str_literals)`. proc_macro2-flags := \ --cap-lints=allow \ - -Zcrate-attr='feature(proc_macro_byte_character,proc_macro_c_str_literals)' \ $(call cfgs-to-flags,$(proc_macro2-cfgs)) quote-cfgs := \
rust/kernel/lib.rs +0 -21
@@ -16,27 +16,6 @@// Please see https://github.com/Rust-for-Linux/linux/issues/2 for details on // the unstable features in use. // -// Stable since Rust 1.79.0. -#![feature(generic_nonzero)] -#![feature(inline_const)] -#![feature(pointer_is_aligned)] -// -// Stable since Rust 1.80.0. -#![feature(slice_flatten)] -// -// Stable since Rust 1.81.0. -#![feature(lint_reasons)] -// -// Stable since Rust 1.82.0. -#![feature(raw_ref_op)] -// -// Stable since Rust 1.83.0. -#![feature(const_maybe_uninit_as_mut_ptr)] -#![feature(const_mut_refs)] -#![feature(const_option)] -#![feature(const_ptr_write)] -#![feature(const_refs_to_cell)] -// // Expected to become stable. #![feature(arbitrary_self_types)] #![feature(derive_coerce_pointee)]
scripts/Makefile.build +1 -5
@@ -310,17 +310,13 @@ $(obj)/%.lst: $(obj)/%.c FORCE # The features in this list are the ones allowed for non-`rust/` code. # -# - Stable since Rust 1.79.0: `feature(inline_const)`. -# - Stable since Rust 1.81.0: `feature(lint_reasons)`. -# - Stable since Rust 1.82.0: `feature(asm_const)`, -# `feature(offset_of_nested)`, `feature(raw_ref_op)`. # - Stable since Rust 1.87.0: `feature(asm_goto)`. # - Expected to become stable: `feature(arbitrary_self_types)`. # - To be determined: `feature(used_with_arg)`. # # Please see https://github.com/Rust-for-Linux/linux/issues/2 for details on # the unstable features in use. -rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,inline_const,lint_reasons,offset_of_nested,raw_ref_op,used_with_arg +rust_allowed_features := arbitrary_self_types,asm_goto,used_with_arg # `--out-dir` is required to avoid temporaries being created by `rustc` in the # current working directory, which may be not accessible in the out-of-tree
Signature · 1 line
2.53.0
Re: [PATCH 07/33] rust: kbuild: remove `feature(...)`s that are now stable
Quoted 6 lines · Miguel Ojeda
Now that the Rust minimum version is 1.85.0, there is no need to enable certain features that are stable.
Thus clean them up.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 5 lines
--- rust/Makefile | 2 -- rust/kernel/lib.rs | 21 --------------------- scripts/Makefile.build | 6 +----- 3 files changed, 1 insertion(+), 28 deletions(-)
Re: [PATCH 07/33] rust: kbuild: remove `feature(...)`s that are now stable
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
Now that the Rust minimum version is 1.85.0, there is no need to enable certain features that are stable.
Thus clean them up.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 8/33 rust: kbuild: simplify `--remap-path-prefix` workaround
In reply to Miguel OjedaWith the minimum version bump in place, rustdoc now always recognizes the --remap-path-prefix flag.
In addition, the Internal Compiler Error that the comment mentions [1] was fixed in Rust 1.87.0 [2], so we still need to skip the flag for the normal rustdoc case, but not for --test since the ICE does not reproduce there -- please see commit 2c8725c1dca3 ("rust: kbuild: skip --remap-path-prefix for rustdoc").
Thus update the comment and remove the skipping of the flag for the --test case.
Note that commit dda135077ecc ("rust: build: remap path to avoid absolute path") re-landed the --remap-path-prefix flag (together with --remap-path-scope), so we keep the workaround, i.e. an alternative could have been to simply delete the skip entirely, but since we still have it and it will be needed when this gets merged, let's keep it.
--- rust/Makefile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
rust/Makefile +4 -5
@@ -142,10 +142,9 @@ rustdoc_modifiers_workaround := $(if $(call rustc-min-version,108800),-Cunsafe-a # Similarly, for doctests (https://github.com/rust-lang/rust/issues/146465). doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rustc-min-version,109100),$(comma)sanitizer) -# `rustc` recognizes `--remap-path-prefix` since 1.26.0, but `rustdoc` only -# since Rust 1.81.0. Moreover, `rustdoc` ICEs on out-of-tree builds since Rust -# 1.82.0 (https://github.com/rust-lang/rust/issues/138520). Thus workaround both -# issues skipping the flag. The former also applies to `RUSTDOC TK`. +# `rustdoc` ICEs on out-of-tree builds in Rust < 1.87.0 +# (https://github.com/rust-lang/rust/issues/138520). Thus workaround the +# issue skipping the flag. quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $< cmd_rustdoc = \ OBJTREE=$(abspath $(objtree)) \
@@ -333,7 +332,7 @@ quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $< rm -rf $(objtree)/$(obj)/test/doctests/kernel; \ mkdir -p $(objtree)/$(obj)/test/doctests/kernel; \ OBJTREE=$(abspath $(objtree)) \ - $(RUSTDOC) --test $(filter-out --remap-path-prefix=%,$(rust_flags)) \ + $(RUSTDOC) --test $(rust_flags) \ -L$(objtree)/$(obj) --extern ffi --extern pin_init \ --extern kernel --extern build_error --extern macros \ --extern bindings --extern uapi \
Signature · 1 line
2.53.0
Gary Guo
maintainerRe: [PATCH 08/33] rust: kbuild: simplify `--remap-path-prefix` workaround
Quoted 9 lines · Miguel Ojeda
With the minimum version bump in place,
rustdocnow always recognizes the--remap-path-prefixflag.In addition, the Internal Compiler Error that the comment mentions [1] was fixed in Rust 1.87.0 [2], so we still need to skip the flag for the normal
rustdoccase, but not for--testsince the ICE does not reproduce there -- please see commit2c8725c1dca3("rust: kbuild: skip--remap-path-prefixforrustdoc").
Quoted 8 lines
Thus update the comment and remove the skipping of the flag for the
--testcase.Note that commit
dda135077ecc("rust: build: remap path to avoid absolute path") re-landed the--remap-path-prefixflag (together with--remap-path-scope), so we keep the workaround, i.e. an alternative could have been to simply delete the skip entirely, but since we still have it and it will be needed when this gets merged, let's keep it.
I'm not sure that I parse this. You do remove the filter-out completely below?
Quoted 27 lines
Signed-off-by Miguel Ojeda <[email protected]>--- rust/Makefile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)rust/Makefile +3
-4@@ -142,10 +142,9 @@ rustdoc_modifiers_workaround := $(if $(call rustc-min-version,108800),-Cunsafe-a # Similarly, for doctests (https://github.com/rust-lang/rust/issues/146465). doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rustc-min-version,109100),$(comma)sanitizer) -# `rustc` recognizes `--remap-path-prefix` since 1.26.0, but `rustdoc` only -# since Rust 1.81.0. Moreover, `rustdoc` ICEs on out-of-tree builds since Rust -# 1.82.0 (https://github.com/rust-lang/rust/issues/138520). Thus workaround both -# issues skipping the flag. The former also applies to `RUSTDOC TK`. +# `rustdoc` ICEs on out-of-tree builds in Rust < 1.87.0 +# (https://github.com/rust-lang/rust/issues/138520). Thus workaround the +# issue skipping the flag. quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $< cmd_rustdoc = \ OBJTREE=$(abspath $(objtree)) \
rust/Makefile quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $< · line 336
Quoted 4 lines
rust/Makefile +0
-1@@ -333,7 +332,7 @@ quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $< rm -rf $(objtree)/$(obj)/test/doctests/kernel; \ mkdir -p $(objtree)/$(obj)/test/doctests/kernel; \ OBJTREE=$(abspath $(objtree)) \ - $(RUSTDOC) --test $(filter-out --remap-path-prefix=%,$(rust_flags)) \
Looks like this is going to conflict with rust-fixes (which adds the --remap-path-scope). Perhaps worth doing a back merge?
Best,
Gary
Quoted 4 lines
rust/Makefile +1
-0+ $(RUSTDOC) --test $(rust_flags) \ -L$(objtree)/$(obj) --extern ffi --extern pin_init \ --extern kernel --extern build_error --extern macros \ --extern bindings --extern uapi \
Re: [PATCH 08/33] rust: kbuild: simplify `--remap-path-prefix` workaround
Quoted 2 lines · Gary Guo
I'm not sure that I parse this. You do remove the filter-out completely below?
(I see you saw the other commit)
Quoted 2 lines
Looks like this is going to conflict with rust-fixes (which adds the --remap-path-scope). Perhaps worth doing a back merge?
It would be only a couple lines conflicting, so it should be fine.
Having said that, when I was doing this, I wondered if we should even consider keeping the workaround. In other words, locally for rust-next, the "normal" commit would be to remove the workaround entirely because there the flag doesn't exist to begin with (i.e. the workaround should have been removed back when the revert landed).
Then, when conflict happens in linux-next, we can just keep the addition of the flag from your commit -- the rest can say as-is, i.e. no workaround needed, because you only enable both flags in a version (1.95.0) where there is no need for the workaround (which was for < 1.87.0).
It is also why I added the second commit here, i.e. the "make it conditional", because I was testing that indeed we didn't need the workaround anymore.
So it may just simpler to do that. What I thought was that perhaps the workaround is good even if we ourselves don't pass the flag, e.g. someone else may be passing it. But the chances are very low, restricted to a couple versions, and the error is obvious and at build time anyway.
Cheers,
Miguel
Re: [PATCH 08/33] rust: kbuild: simplify `--remap-path-prefix` workaround
In reply to Miguel OjedaOn Wed, 01 Apr 2026 13:45:15 +0200, Miguel Ojeda <[email protected]> wrote:
Does this simplify the workaround, or just remove one instance of it?
Quoted 7 lines
[...]
Note that commit
dda135077ecc("rust: build: remap path to avoid absolute path") re-landed the--remap-path-prefixflag (together with--remap-path-scope), so we keep the workaround, i.e. an alternative could have been to simply delete the skip entirely, but since we still have it and it will be needed when this gets merged, let's keep it.
The use of "re-landed" is confusing without a mention of commit 8cf5b3f83614 ("Revert "kbuild, rust: use -fremap-path-prefix to make paths relative""). Though this whole thing might be clearer without a mention of that history; the important part is that there's no conditional use of --remap-path-scope in the base commit but there will be when dda135077ecc is merged (the use of "this" in "this gets merged" is also ambiguous).
Quoted 7 lines
rust/Makefile +0
-0
rust/Makefile rustdoc_modifiers_workaround := $(if $(call rustc-min-version,108800),-Cunsafe-a · line 147
Quoted 10 lines
rust/Makefile +3
-4@@ -142,10 +142,9 @@ rustdoc_modifiers_workaround := $(if $(call rustc-min-version,108800),-Cunsafe-a # Similarly, for doctests (https://github.com/rust-lang/rust/issues/146465). doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rustc-min-version,109100),$(comma)sanitizer) -# `rustc` recognizes `--remap-path-prefix` since 1.26.0, but `rustdoc` only -# since Rust 1.81.0. Moreover, `rustdoc` ICEs on out-of-tree builds since Rust -# 1.82.0 (https://github.com/rust-lang/rust/issues/138520). Thus workaround both -# issues skipping the flag. The former also applies to `RUSTDOC TK`. +# `rustdoc` ICEs on out-of-tree builds in Rust < 1.87.0 +# (https://github.com/rust-lang/rust/issues/138520). Thus workaround the +# issue skipping the flag.
_by_ skipping the flag? this is preexisting, though.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 9/33 rust: kbuild: make `--remap-path-prefix` workaround conditional
In reply to Miguel OjedaThe Internal Compiler Error that the comment mentions [1] was fixed in Rust 1.87.0 [2]. And, for other workarounds, we plan on limiting where we apply them [3].
Thus limit the ICE one too.
This will help to make sure the workaround is not needed anymore on newer versions.
--- rust/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
rust/Makefile +3 -1
@@ -145,10 +145,12 @@ doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rust # `rustdoc` ICEs on out-of-tree builds in Rust < 1.87.0 # (https://github.com/rust-lang/rust/issues/138520). Thus workaround the # issue skipping the flag. +rustdoc_remap_workaround := $(if $(call rustc-min-version,108700),,--remap-path-prefix=%) + quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $< cmd_rustdoc = \ OBJTREE=$(abspath $(objtree)) \ - $(RUSTDOC) $(filter-out $(skip_flags) --remap-path-prefix=%,$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \ + $(RUSTDOC) $(filter-out $(skip_flags) $(rustdoc_remap_workaround),$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \ $(rustc_target_flags) -L$(objtree)/$(obj) \ -Zunstable-options --generate-link-to-definition \ --output $(rustdoc_output) \
Signature · 1 line
2.53.0
Gary Guo
maintainerRe: [PATCH 09/33] rust: kbuild: make `--remap-path-prefix` workaround conditional
Quoted 22 lines · Miguel Ojeda
The Internal Compiler Error that the comment mentions [1] was fixed in Rust 1.87.0 [2]. And, for other workarounds, we plan on limiting where we apply them [3].
Thus limit the ICE one too.
This will help to make sure the workaround is not needed anymore on newer versions.
Signed-off-by Miguel Ojeda <[email protected]>--- rust/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)rust/Makefile +0
-0
rust/Makefile doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rust · line 148
Quoted 4 lines
rust/Makefile +1
-0@@ -145,10 +145,12 @@ doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rust # `rustdoc` ICEs on out-of-tree builds in Rust < 1.87.0 # (https://github.com/rust-lang/rust/issues/138520). Thus workaround the # issue skipping the flag. +rustdoc_remap_workaround := $(if $(call rustc-min-version,108700),,--remap-path-prefix=%)
Okay, I see what the comments mean now. Perhaps squash this to the previous commit?
Best,
Gary
Quoted 9 lines
rust/Makefile +2
-1+ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $< cmd_rustdoc = \ OBJTREE=$(abspath $(objtree)) \ - $(RUSTDOC) $(filter-out $(skip_flags) --remap-path-prefix=%,$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \ + $(RUSTDOC) $(filter-out $(skip_flags) $(rustdoc_remap_workaround),$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \ $(rustc_target_flags) -L$(objtree)/$(obj) \ -Zunstable-options --generate-link-to-definition \ --output $(rustdoc_output) \
Re: [PATCH 09/33] rust: kbuild: make `--remap-path-prefix` workaround conditional
Quoted 3 lines · Gary Guo
Okay, I see what the comments mean now. Perhaps squash this to the previous commit?
This one was mostly to ensure the workaround was not needed anymore, i.e. it is more "optional" than the other.
In fact, we may want to just not have neither of the patches, i.e. we could just remove the workaround given the timelines of the branches -- please see my reply on the previous one on this.
Cheers,
Miguel
Re: [PATCH 09/33] rust: kbuild: make `--remap-path-prefix` workaround conditional
In reply to Miguel OjedaQuoted 10 lines · Miguel Ojeda
The Internal Compiler Error that the comment mentions [1] was fixed in Rust 1.87.0 [2]. And, for other workarounds, we plan on limiting where we apply them [3].
Thus limit the ICE one too.
This will help to make sure the workaround is not needed anymore on newer versions.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 10/33 rust: transmute: simplify code with Rust 1.80.0 `split_at_*checked()`
In reply to Miguel Ojedafeature(split_at_checked) [1] has been stabilized in Rust 1.80.0 [2], which is beyond our new minimum Rust version (Rust 1.85.0).
Thus simplify the code using split_at_*checked().
--- rust/kernel/transmute.rs | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-)
rust/kernel/transmute.rs +6 -27
@@ -66,16 +66,9 @@ fn from_bytes_prefix(bytes: &[u8]) -> Option<(&Self, &[u8])> where Self: Sized, { - if bytes.len() < size_of::<Self>() { -None - } else { -// PANIC: We checked that `bytes.len() >= size_of::<Self>`, thus `split_at` cannot -// panic. -// TODO: replace with `split_at_checked` once the MSRV is >= 1.80. - let (prefix, remainder) = bytes.split_at(size_of::<Self>()); + let (prefix, remainder) = bytes.split_at_checked(size_of::<Self>())?; -Self ::from_bytes (prefix).map (|s| (s, remainder)) - } +Self ::from_bytes (prefix).map (|s| (s, remainder)) }/// Converts a mutable slice of bytes to a reference to `Self`.
@@ -108,16 +101,9 @@ fn from_bytes_mut_prefix(bytes: &mut [u8]) -> Option<(&mut Self, &mut [u8])> where Self: AsBytes + Sized, { -if bytes.len () <size_of ::<Self >() { -None - }else { -// PANIC: We checked that `bytes.len() >= size_of::<Self>`, thus `split_at_mut` cannot -// panic. -// TODO: replace with `split_at_mut_checked` once the MSRV is >= 1.80. -let (prefix, remainder) = bytes.split_at_mut (size_of ::<Self >()); +let (prefix, remainder) = bytes.split_at_mut_checked (size_of ::<Self >())?; -Self ::from_bytes_mut (prefix).map (|s| (s, remainder)) - } +Self ::from_bytes_mut (prefix).map (|s| (s, remainder)) }/// Creates an owned instance of `Self` by copying `bytes`.
@@ -147,16 +133,9 @@ fn from_bytes_copy_prefix(bytes: &[u8]) -> Option<(Self, &[u8])> where Self: Sized, { - if bytes.len() < size_of::<Self>() { -None - } else { -// PANIC: We checked that `bytes.len() >= size_of::<Self>`, thus `split_at` cannot -// panic. -// TODO: replace with `split_at_checked` once the MSRV is >= 1.80. - let (prefix, remainder) = bytes.split_at(size_of::<Self>()); + let (prefix, remainder) = bytes.split_at_checked(size_of::<Self>())?; -Self ::from_bytes_copy (prefix).map (|s| (s, remainder)) - } +Self ::from_bytes_copy (prefix).map (|s| (s, remainder)) } }
Signature · 1 line
2.53.0
Re: [PATCH 10/33] rust: transmute: simplify code with Rust 1.80.0 `split_at_*checked()`
Quoted 8 lines · Miguel Ojeda
feature(split_at_checked)[1] has been stabilized in Rust 1.80.0 [2], which is beyond our new minimum Rust version (Rust 1.85.0).Thus simplify the code using
split_at_*checked().Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- rust/kernel/transmute.rs | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-)
Re: [PATCH 10/33] rust: transmute: simplify code with Rust 1.80.0 `split_at_*checked()`
In reply to Miguel OjedaQuoted 2 lines · Miguel Ojeda
feature(split_at_checked)[1] has been stabilized in Rust 1.80.0 [2], which is beyond our new minimum Rust version (Rust 1.85.0).
"beyond" is probably not the right word here?
Signature · 1 line
Tamir Duberstein <[email protected]>
Re: [PATCH 10/33] rust: transmute: simplify code with Rust 1.80.0 `split_at_*checked()`
Quoted 2 lines · Tamir Duberstein
"beyond" is probably not the right word here?
I think you are right -- reworded.
Thanks!
Cheers,
Miguel
Miguel Ojeda
maintainerPATCH 11/33 rust: alloc: simplify with `NonNull::add()` now that it is stable
In reply to Miguel OjedaCurrently we need to go through raw pointers and then re-create the NonNull from the result of offsetting the raw pointer.
Thus, now that we bump the Rust minimum version, simplify using NonNull::add() and clean the TODO note.
--- rust/kernel/alloc/allocator/iter.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
rust/kernel/alloc/allocator/iter.rs +1 -7
@@ -42,15 +42,9 @@ fn next(&mut self) -> Option<Self::Item> {return None ; } -// TODO: Use `NonNull::add()` instead, once the minimum supported compiler version is -// bumped to 1.80 or later. -// // SAFETY: `offset` is in the interval `[0, (self.page_count() - 1) * page::PAGE_SIZE]`, // hence the resulting pointer is guaranteed to be within the same allocation. -let ptr =unsafe { self.buf.as_ptr ().add (offset) }; - -// SAFETY: `ptr` is guaranteed to be non-null given that it is derived from `self.buf`. -let ptr =unsafe {NonNull ::new_unchecked (ptr) }; +let ptr =unsafe { self.buf.add (offset) };// SAFETY: // - `ptr` is a valid pointer to a `Vmalloc` allocation.
Signature · 1 line
2.53.0
Re: [PATCH 11/33] rust: alloc: simplify with `NonNull::add()` now that it is stable
Quoted 7 lines · Miguel Ojeda
Currently we need to go through raw pointers and then re-create the
NonNullfrom the result of offsetting the raw pointer.Thus, now that we bump the Rust minimum version, simplify using
NonNull::add()and clean the TODO note.Signed-off-by Miguel Ojeda <[email protected]>
Re: [PATCH 11/33] rust: alloc: simplify with `NonNull::add()` now that it is stable
In reply to Miguel OjedaQuoted 7 lines · Miguel Ojeda
Currently we need to go through raw pointers and then re-create the
NonNullfrom the result of offsetting the raw pointer.Thus, now that we bump the Rust minimum version, simplify using
NonNull::add()and clean the TODO note.Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- rust/kernel/alloc/allocator/iter.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
Re: [PATCH 11/33] rust: alloc: simplify with `NonNull::add()` now that it is stable
In reply to Miguel OjedaQuoted 5 lines · Miguel Ojeda
Currently we need to go through raw pointers and then re-create the
NonNullfrom the result of offsetting the raw pointer.Thus, now that we bump the Rust minimum version, simplify using
NonNull::add()and clean the TODO note.
This description is inconsistent with the previous one which had citations for both the feature (function in this case) and the feature in which it became stable (available in this case). I don't prefer either style in particular, just that things are consistent.
Signature · 1 line
Tamir Duberstein <[email protected]>
Re: [PATCH 11/33] rust: alloc: simplify with `NonNull::add()` now that it is stable
Quoted 5 lines · Tamir Duberstein
This description is inconsistent with the previous one which had citations for both the feature (function in this case) and the feature in which it became stable (available in this case). I don't prefer either style in particular, just that things are consistent.
Sure, I added a couple references. I think it is good to be consistent (well, at least within a patch series, but I wouldn't say no to more information even if it is inconsistent sometimes, especially across different patch series, since everyone writes messages a bit differently...).
Cheers,
Miguel
Miguel Ojeda
maintainerPATCH 12/33 rust: macros: update `extract_if` MSRV TODO comment
In reply to Miguel Ojedafeature(extract_if) was stabilized in Rust 1.87.0 [1].
Thus update the comment to reflect that.
Alternatively, we could use it unstably already.
--- rust/macros/kunit.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
rust/macros/kunit.rs +1 -1
@@ -87,7 +87,7 @@ pub(crate) fn kunit_tests(test_suite: Ident, mut module: ItemMod) -> Result<Tokecontinue ; }; -// TODO: Replace below with `extract_if` when MSRV is bumped above 1.85. +// TODO: Replace with `extract_if` when MSRV is >= 1.87.0. let before_len = f.attrs.len (); f.attrs.retain (|attr| !attr.path ().is_ident ("test" ));if f.attrs.len () == before_len {
Signature · 1 line
2.53.0
Gary Guo
maintainerRe: [PATCH 12/33] rust: macros: update `extract_if` MSRV TODO comment
Quoted 17 lines · Miguel Ojeda
feature(extract_if)was stabilized in Rust 1.87.0 [1].Thus update the comment to reflect that.
Alternatively, we could use it unstably already.
Signed-off-by Miguel Ojeda <[email protected]>--- rust/macros/kunit.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)rust/macros/kunit.rs +0
-0
rust/macros/kunit.rs pub(crate) fn kunit_tests(test_suite: Ident, mut module: ItemMod) -> Result<Toke · line 93
Quoted 8 lines
rust/macros/kunit.rs +1
-1@@ -87,7 +87,7 @@ pub(crate) fn kunit_tests(test_suite: Ident, mut module: ItemMod) -> Result<Tokecontinue ; }; -// TODO: Replace below with `extract_if` when MSRV is bumped above 1.85. +// TODO: Replace with `extract_if` when MSRV is >= 1.87.0. let before_len = f.attrs.len (); f.attrs.retain (|attr| !attr.path ().is_ident ("test" ));if f.attrs.len () == before_len {
When I write the comment the intention is to enable the unstable feature and switch.
Best,
Gary
rust/macros/kunit.rs +5 -4
@@ -87,10 +87,11 @@ pub(crate) fn kunit_tests(test_suite: Ident, mut module: ItemMod) -> Result<Tokecontinue ; }; -// TODO: Replace below with `extract_if` when MSRV is bumped above 1.85. -let before_len = f.attrs.len (); - f.attrs.retain (|attr| !attr.path ().is_ident ("test" )); -if f.attrs.len () == before_len { +if f.attrs + .extract_if (.., |attr| attr.path ().is_ident ("test" )) + .count () + ==0 + { processed_items.push (Item ::Fn (f));continue ; }
rust/macros/lib.rs +3 -0
@@ -6,6 +6,9 @@// and thus add a dependency on `include/config/RUSTC_VERSION_TEXT`, which is // touched by Kconfig when the version string from the compiler changes. +// Stable since Rust 1.87.0. +#![feature(extract_if)] +// // Stable since Rust 1.88.0 under a different name, `proc_macro_span_file`, // which was added in Rust 1.88.0. This is why `cfg_attr` is used here, i.e. // to avoid depending on the full `proc_macro_span` on Rust >= 1.88.0.
Re: [PATCH 12/33] rust: macros: update `extract_if` MSRV TODO comment
Quoted 3 lines · Gary Guo
When I write the comment the intention is to enable the unstable feature and switch.
Yeah, that is what I meant as the alternative in the commit message.
I am OK with either.
(By the way, I wondered why you mentioned 1.85 in the comment, I guess it was supposed to be 1.86 instead originally, i.e. "above" as in > 1.86)
Cheers,
Miguel
Re: [PATCH 12/33] rust: macros: update `extract_if` MSRV TODO comment
In reply to Miguel OjedaQuoted 5 lines · Miguel Ojeda
feature(extract_if)was stabilized in Rust 1.87.0 [1].Thus update the comment to reflect that.
Alternatively, we could use it unstably already.
Perhaps the TODO could mention this alternative. Would probably make a good first issue.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 13/33 rust: block: update `const_refs_to_static` MSRV TODO comment
In reply to Miguel Ojedafeature(const_refs_to_static) was stabilized in Rust 1.83.0 [1].
Thus update the comment to reflect that.
--- rust/kernel/block/mq/gen_disk.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
rust/kernel/block/mq/gen_disk.rs +1 -3
@@ -140,9 +140,7 @@ pub fn build<T: Operations>( devnode: None, alternative_gpt_sector: None, get_unique_id: None, -// TODO: Set to THIS_MODULE. Waiting for const_refs_to_static feature to -// be merged (unstable in rustc 1.78 which is staged for linux 6.10) -// <https://github.com/rust-lang/rust/issues/119618> +// TODO: Set to `THIS_MODULE`. owner: core::ptr::null_mut(), pr_ops: core::ptr::null_mut(), free_disk: None,
Signature · 1 line
2.53.0
Re: [PATCH 13/33] rust: block: update `const_refs_to_static` MSRV TODO comment
Quoted 6 lines · Miguel Ojeda
feature(const_refs_to_static)was stabilized in Rust 1.83.0 [1].Thus update the comment to reflect that.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- rust/kernel/block/mq/gen_disk.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
Re: [PATCH 13/33] rust: block: update `const_refs_to_static` MSRV TODO comment
In reply to Miguel Ojedarust/kernel/block/mq/gen_disk.rs pub fn build<T: Operations>( · line 143
Quoted 12 lines · Miguel Ojeda
rust/kernel/block/mq/gen_disk.rs +1
-3@@ -140,9 +140,7 @@ pub fn build<T: Operations>( devnode: None, alternative_gpt_sector: None, get_unique_id: None, -// TODO: Set to THIS_MODULE. Waiting for const_refs_to_static feature to -// be merged (unstable in rustc 1.78 which is staged for linux 6.10) -// <https://github.com/rust-lang/rust/issues/119618> +// TODO: Set to `THIS_MODULE`.
Good first issue?
Signature · 1 line
Tamir Duberstein <[email protected]>
Gary Guo
maintainerRe: [PATCH 13/33] rust: block: update `const_refs_to_static` MSRV TODO comment
Quoted 15 lines · Tamir Duberstein
rust/kernel/block/mq/gen_disk.rs pub fn build<T: Operations>( · line 143
Quoted 12 lines · Miguel Ojeda
rust/kernel/block/mq/gen_disk.rs +1
-3@@ -140,9 +140,7 @@ pub fn build<T: Operations>( devnode: None, alternative_gpt_sector: None, get_unique_id: None, -// TODO: Set to THIS_MODULE. Waiting for const_refs_to_static feature to -// be merged (unstable in rustc 1.78 which is staged for linux 6.10) -// <https://github.com/rust-lang/rust/issues/119618> +// TODO: Set to `THIS_MODULE`. Good first issue?
It's actually quite tricky. There're already attempts on the list, although I'm not very happy with the solution.
The tricky part is that THIS_MODULE needs to be supplied by the leaf module, it cannot be constructed inside the kernel crate.
Best,
Gary
Quoted 2 lines
Reviewed-by Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 14/33 rust: bump `bindgen` minimum supported version to 0.71.1 (Debian Trixie)
In reply to Miguel OjedaAs proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's bindgen versions as our minimum supported version.
Debian Trixie was released with bindgen 0.71.1, which it still uses to this day [2].
Debian Trixie's release happened on 2025-08-09 [3], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
Ubuntu 25.10 also has a recent enough bindgen [4] (even the already unsupported Ubuntu 25.04 had it), and they also provide versioned packages with bindgen 0.71.1 back to Ubuntu 24.04 LTS [5].
--- Documentation/process/changes.rst | 2 +- scripts/min-tool-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/process/changes.rst +1 -1
@@ -32,7 +32,7 @@ you probably needn't concern yourself with pcmciautils. GNU C 8.1 gcc --version Clang/LLVM (optional) 15.0.0 clang --version Rust (optional) 1.85.0 rustc --version -bindgen (optional) 0.65.1 bindgen --version +bindgen (optional) 0.71.1 bindgen --version GNU make 4.0 make --version bash 4.2 bash --version binutils 2.30 ld -v
scripts/min-tool-version.sh +1 -1
@@ -34,7 +34,7 @@ rustc) echo 1.85.0 ;; bindgen) - echo 0.65.1 + echo 0.71.1 ;; *) echo "$1: unknown tool" >&2
Signature · 1 line
2.53.0
Re: [PATCH 14/33] rust: bump `bindgen` minimum supported version to 0.71.1 (Debian Trixie)
Quoted 20 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's
bindgenversions as our minimum supported version.Debian Trixie was released with
bindgen0.71.1, which it still uses to this day [2].Debian Trixie's release happened on 2025-08-09 [3], which means that a fair amount of time has passed since its release for kernel developers to upgrade.
Thus bump the minimum to the new version.
Then, in later commits, clean up most of the workarounds and other bits that this upgrade of the minimum allows us.
Ubuntu 25.10 also has a recent enough
bindgen[4] (even the already unsupported Ubuntu 25.04 had it), and they also provide versioned packages withbindgen0.71.1 back to Ubuntu 24.04 LTS [5].
Quoted 6 lines
Link https://lwn.net/Articles/1050174/ [1]Signed-off-by Miguel Ojeda <[email protected]>
Quoted 4 lines
--- Documentation/process/changes.rst | 2 +- scripts/min-tool-version.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Re: [PATCH 14/33] rust: bump `bindgen` minimum supported version to 0.71.1 (Debian Trixie)
In reply to Miguel OjedaQuoted 8 lines · Miguel Ojeda
As proposed in the past in e.g. LPC 2025 and the Maintainers Summit [1], we are going to follow Debian Stable's
bindgenversions as our minimum supported version.Debian Trixie was released with
bindgen0.71.1, which it still uses to this day [2].[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 15/33 rust: rust_is_available: remove warning for 0.66.[01] buggy versions
In reply to Miguel OjedaIt is not possible anymore to fall into the issue that this warning was alerting about given the bindgen version bump.
Thus simplify by removing the machinery behind it, including tests.
--- scripts/rust_is_available.sh | 13 ------------ scripts/rust_is_available_bindgen_0_66.h | 2 -- scripts/rust_is_available_test.py | 26 +++--------------------- 3 files changed, 3 insertions(+), 38 deletions(-) delete mode 100644 scripts/rust_is_available_bindgen_0_66.h
scripts/rust_is_available.sh +0 -13
@@ -163,19 +163,6 @@ if [ "$rust_bindings_generator_cversion" -lt "$rust_bindings_generator_min_cvers echo >&2 "***" exit 1 fi -if [ "$rust_bindings_generator_cversion" -eq 6600 ] || - [ "$rust_bindings_generator_cversion" -eq 6601 ]; then - # Distributions may have patched the issue (e.g. Debian did). - if ! "$BINDGEN" $(dirname $0)/rust_is_available_bindgen_0_66.h >/dev/null; then - echo >&2 "***" - echo >&2 "*** Rust bindings generator '$BINDGEN' versions 0.66.0 and 0.66.1 may not" - echo >&2 "*** work due to a bug (https://github.com/rust-lang/rust-bindgen/pull/2567)," - echo >&2 "*** unless patched (like Debian's)." - echo >&2 "*** Your version: $rust_bindings_generator_version" - echo >&2 "***" - warning=1 - fi -fi # Check that the `libclang` used by the Rust bindings generator is suitable. #
scripts/rust_is_available_bindgen_0_66.h deleted +0 -2
@@ -1,2 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#define A "\0"
scripts/rust_is_available_test.py +3 -23
@@ -54,17 +54,12 @@ else: """) @classmethod - def generate_bindgen(cls, version_stdout, libclang_stderr, version_0_66_patched=False, libclang_concat_patched=False): + def generate_bindgen(cls, version_stdout, libclang_stderr, libclang_concat_patched=False): if libclang_stderr is None: libclang_case = f"raise SystemExit({cls.bindgen_default_bindgen_libclang_failure_exit_code})" else: libclang_case = f"print({repr(libclang_stderr)}, file=sys.stderr)" - if version_0_66_patched: - version_0_66_case = "pass" - else: - version_0_66_case = "raise SystemExit(1)" - if libclang_concat_patched: libclang_concat_case = "print('pub static mut foofoo: ::std::os::raw::c_int;')" else:
@@ -74,8 +69,6 @@ else: import sys if "rust_is_available_bindgen_libclang.h" in " ".join(sys.argv): {libclang_case} -elif "rust_is_available_bindgen_0_66.h" in " ".join(sys.argv): - {version_0_66_case} elif "rust_is_available_bindgen_libclang_concat.h" in " ".join(sys.argv): {libclang_concat_case} else:
@@ -83,8 +76,8 @@ else: """) @classmethod - def generate_bindgen_version(cls, stdout, version_0_66_patched=False): - return cls.generate_bindgen(stdout, cls.bindgen_default_bindgen_libclang_stderr, version_0_66_patched) + def generate_bindgen_version(cls, stdout): + return cls.generate_bindgen(stdout, cls.bindgen_default_bindgen_libclang_stderr) @classmethod def generate_bindgen_libclang_failure(cls):
@@ -245,19 +238,6 @@ else: result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen }) self.assertIn(f"Rust bindings generator '{bindgen}' is too old.", result.stderr) - def test_bindgen_bad_version_0_66_0_and_0_66_1(self): - for version in ("0.66.0", "0.66.1"): - with self.subTest(version=version): - bindgen = self.generate_bindgen_version(f"bindgen {version}") - result = self.run_script(self.Expected.SUCCESS_WITH_WARNINGS, { "BINDGEN": bindgen }) - self.assertIn(f"Rust bindings generator '{bindgen}' versions 0.66.0 and 0.66.1 may not", result.stderr) - - def test_bindgen_bad_version_0_66_0_and_0_66_1_patched(self): - for version in ("0.66.0", "0.66.1"): - with self.subTest(version=version): - bindgen = self.generate_bindgen_version(f"bindgen {version}", True) - result = self.run_script(self.Expected.SUCCESS, { "BINDGEN": bindgen }) - def test_bindgen_libclang_failure(self): bindgen = self.generate_bindgen_libclang_failure() result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen })
Signature · 1 line
2.53.0
Gary Guo
maintainerRe: [PATCH 15/33] rust: rust_is_available: remove warning for 0.66.[01] buggy versions
Quoted 4 lines · Miguel Ojeda
It is not possible anymore to fall into the issue that this warning was alerting about given the
bindgenversion bump.Thus simplify by removing the machinery behind it, including tests.
The scripts/rust_is_available.sh change looks correct to me, although I couldn't get scripts/rust_is_available_test.py to run on NixOS.
Looks like it filtered out PATH but uses /usr/bin/env to find python binary? For obvious reasons that will only work if python is located /usr/bin/python.
Best,
Gary
Quoted 104 lines
Signed-off-by Miguel Ojeda <[email protected]>--- scripts/rust_is_available.sh | 13 ------------ scripts/rust_is_available_bindgen_0_66.h | 2 -- scripts/rust_is_available_test.py | 26 +++--------------------- 3 files changed, 3 insertions(+), 38 deletions(-) delete mode 100644 scripts/rust_is_available_bindgen_0_66.hscripts/rust_is_available.sh +0
-13@@ -163,19 +163,6 @@ if [ "$rust_bindings_generator_cversion" -lt "$rust_bindings_generator_min_cvers echo >&2 "***" exit 1 fi -if [ "$rust_bindings_generator_cversion" -eq 6600 ] || - [ "$rust_bindings_generator_cversion" -eq 6601 ]; then - # Distributions may have patched the issue (e.g. Debian did). - if ! "$BINDGEN" $(dirname $0)/rust_is_available_bindgen_0_66.h >/dev/null; then - echo >&2 "***" - echo >&2 "*** Rust bindings generator '$BINDGEN' versions 0.66.0 and 0.66.1 may not" - echo >&2 "*** work due to a bug (https://github.com/rust-lang/rust-bindgen/pull/2567)," - echo >&2 "*** unless patched (like Debian's)." - echo >&2 "*** Your version: $rust_bindings_generator_version" - echo >&2 "***" - warning=1 - fi -fi # Check that the `libclang` used by the Rust bindings generator is suitable. #scripts/rust_is_available_bindgen_0_66.h deleted +0
-2@@ -1,2 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#define A "\0"scripts/rust_is_available_test.py +3
-23@@ -54,17 +54,12 @@ else: """) @classmethod - def generate_bindgen(cls, version_stdout, libclang_stderr, version_0_66_patched=False, libclang_concat_patched=False): + def generate_bindgen(cls, version_stdout, libclang_stderr, libclang_concat_patched=False): if libclang_stderr is None: libclang_case = f"raise SystemExit({cls.bindgen_default_bindgen_libclang_failure_exit_code})" else: libclang_case = f"print({repr(libclang_stderr)}, file=sys.stderr)" - if version_0_66_patched: - version_0_66_case = "pass" - else: - version_0_66_case = "raise SystemExit(1)" - if libclang_concat_patched: libclang_concat_case = "print('pub static mut foofoo: ::std::os::raw::c_int;')" else:@@ -74,8 +69,6 @@ else: import sys if "rust_is_available_bindgen_libclang.h" in " ".join(sys.argv): {libclang_case} -elif "rust_is_available_bindgen_0_66.h" in " ".join(sys.argv): - {version_0_66_case} elif "rust_is_available_bindgen_libclang_concat.h" in " ".join(sys.argv): {libclang_concat_case} else:@@ -83,8 +76,8 @@ else: """) @classmethod - def generate_bindgen_version(cls, stdout, version_0_66_patched=False): - return cls.generate_bindgen(stdout, cls.bindgen_default_bindgen_libclang_stderr, version_0_66_patched) + def generate_bindgen_version(cls, stdout): + return cls.generate_bindgen(stdout, cls.bindgen_default_bindgen_libclang_stderr) @classmethod def generate_bindgen_libclang_failure(cls):@@ -245,19 +238,6 @@ else: result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen }) self.assertIn(f"Rust bindings generator '{bindgen}' is too old.", result.stderr) - def test_bindgen_bad_version_0_66_0_and_0_66_1(self): - for version in ("0.66.0", "0.66.1"): - with self.subTest(version=version): - bindgen = self.generate_bindgen_version(f"bindgen {version}") - result = self.run_script(self.Expected.SUCCESS_WITH_WARNINGS, { "BINDGEN": bindgen }) - self.assertIn(f"Rust bindings generator '{bindgen}' versions 0.66.0 and 0.66.1 may not", result.stderr) - - def test_bindgen_bad_version_0_66_0_and_0_66_1_patched(self): - for version in ("0.66.0", "0.66.1"): - with self.subTest(version=version): - bindgen = self.generate_bindgen_version(f"bindgen {version}", True) - result = self.run_script(self.Expected.SUCCESS, { "BINDGEN": bindgen }) - def test_bindgen_libclang_failure(self): bindgen = self.generate_bindgen_libclang_failure() result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen })
Re: [PATCH 15/33] rust: rust_is_available: remove warning for 0.66.[01] buggy versions
Quoted 6 lines · Gary Guo
The
scripts/rust_is_available.shchange looks correct to me, although I couldn't getscripts/rust_is_available_test.pyto run on NixOS.Looks like it filtered out PATH but uses
/usr/bin/envto find python binary? For obvious reasons that will only work if python is located/usr/bin/python.
Yeah, the script has some assumptions on it (e.g. it also assumes dash behavior vs. bash in a couple tests which I should relax too). Happy to change that.
Thanks for testing it :)
Cheers,
Miguel
Re: [PATCH 15/33] rust: rust_is_available: remove warning for 0.66.[01] buggy versions
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
It is not possible anymore to fall into the issue that this warning was alerting about given the
bindgenversion bump.Thus simplify by removing the machinery behind it, including tests.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 16/33 rust: rust_is_available: remove warning for < 0.69.5 && libclang >= 19.1
In reply to Miguel OjedaIt is not possible anymore to fall into the issue that this warning was alerting about given the bindgen version bump.
Thus simplify by removing the machinery behind it, including tests.
--- scripts/rust_is_available.sh | 15 -------- ...ust_is_available_bindgen_libclang_concat.h | 3 -- scripts/rust_is_available_test.py | 34 +------------------ 3 files changed, 1 insertion(+), 51 deletions(-) delete mode 100644 scripts/rust_is_available_bindgen_libclang_concat.h
scripts/rust_is_available.sh +0 -15
@@ -214,21 +214,6 @@ if [ "$bindgen_libclang_cversion" -lt "$bindgen_libclang_min_cversion" ]; then exit 1 fi -if [ "$bindgen_libclang_cversion" -ge 1900100 ] && - [ "$rust_bindings_generator_cversion" -lt 6905 ]; then - # Distributions may have patched the issue (e.g. Debian did). - if ! "$BINDGEN" $(dirname $0)/rust_is_available_bindgen_libclang_concat.h | grep -q foofoo; then - echo >&2 "***" - echo >&2 "*** Rust bindings generator '$BINDGEN' < 0.69.5 together with libclang >= 19.1" - echo >&2 "*** may not work due to a bug (https://github.com/rust-lang/rust-bindgen/pull/2824)," - echo >&2 "*** unless patched (like Debian's)." - echo >&2 "*** Your bindgen version: $rust_bindings_generator_version" - echo >&2 "*** Your libclang version: $bindgen_libclang_version" - echo >&2 "***" - warning=1 - fi -fi - # If the C compiler is Clang, then we can also check whether its version # matches the `libclang` version used by the Rust bindings generator. #
scripts/rust_is_available_bindgen_libclang_concat.h deleted +0 -3
@@ -1,3 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#define F (x) int x##x -F (foo);
scripts/rust_is_available_test.py +1 -33
@@ -54,23 +54,16 @@ else: """) @classmethod - def generate_bindgen(cls, version_stdout, libclang_stderr, libclang_concat_patched=False): + def generate_bindgen(cls, version_stdout, libclang_stderr): if libclang_stderr is None: libclang_case = f"raise SystemExit({cls.bindgen_default_bindgen_libclang_failure_exit_code})" else: libclang_case = f"print({repr(libclang_stderr)}, file=sys.stderr)" - if libclang_concat_patched: - libclang_concat_case = "print('pub static mut foofoo: ::std::os::raw::c_int;')" - else: - libclang_concat_case = "pass" - return cls.generate_executable(f"""#!/usr/bin/env python3 import sys if "rust_is_available_bindgen_libclang.h" in " ".join(sys.argv): {libclang_case} -elif "rust_is_available_bindgen_libclang_concat.h" in " ".join(sys.argv): - {libclang_concat_case} else: print({repr(version_stdout)}) """)
@@ -255,31 +248,6 @@ else: result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen }) self.assertIn(f"libclang (used by the Rust bindings generator '{bindgen}') is too old.", result.stderr) - def test_bindgen_bad_libclang_concat(self): - for (bindgen_version, libclang_version, expected_not_patched) in ( - ("0.69.4", "18.0.0", self.Expected.SUCCESS), - ("0.69.4", "19.1.0", self.Expected.SUCCESS_WITH_WARNINGS), - ("0.69.4", "19.2.0", self.Expected.SUCCESS_WITH_WARNINGS), - - ("0.69.5", "18.0.0", self.Expected.SUCCESS), - ("0.69.5", "19.1.0", self.Expected.SUCCESS), - ("0.69.5", "19.2.0", self.Expected.SUCCESS), - - ("0.70.0", "18.0.0", self.Expected.SUCCESS), - ("0.70.0", "19.1.0", self.Expected.SUCCESS), - ("0.70.0", "19.2.0", self.Expected.SUCCESS), - ): - with self.subTest(bindgen_version=bindgen_version, libclang_version=libclang_version): - cc = self.generate_clang(f"clang version {libclang_version}") - libclang_stderr = f"scripts/rust_is_available_bindgen_libclang.h:2:9: warning: clang version {libclang_version} [-W#pragma-messages], err: false" - bindgen = self.generate_bindgen(f"bindgen {bindgen_version}", libclang_stderr) - result = self.run_script(expected_not_patched, { "BINDGEN": bindgen, "CC": cc }) - if expected_not_patched == self.Expected.SUCCESS_WITH_WARNINGS: - self.assertIn(f"Rust bindings generator '{bindgen}' < 0.69.5 together with libclang >= 19.1", result.stderr) - - bindgen = self.generate_bindgen(f"bindgen {bindgen_version}", libclang_stderr, libclang_concat_patched=True) - result = self.run_script(self.Expected.SUCCESS, { "BINDGEN": bindgen, "CC": cc }) - def test_clang_matches_bindgen_libclang_different_bindgen(self): bindgen = self.generate_bindgen_libclang("scripts/rust_is_available_bindgen_libclang.h:2:9: warning: clang version 999.0.0 [-W#pragma-messages], err: false") result = self.run_script(self.Expected.SUCCESS_WITH_WARNINGS, { "BINDGEN": bindgen })
Signature · 1 line
2.53.0
Re: [PATCH 16/33] rust: rust_is_available: remove warning for < 0.69.5 && libclang >= 19.1
Quoted 4 lines · Miguel Ojeda
It is not possible anymore to fall into the issue that this warning was alerting about given the
bindgenversion bump.Thus simplify by removing the machinery behind it, including tests.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 17/33 rust: kbuild: update `bindgen --rust-target` version and replace comment
In reply to Miguel OjedaAs the comment in the Makefile explains, previously, we needed to limit ourselves to the list of Rust versions known by bindgen for its --rust-target option.
In other words, we needed to consult the versions known by the minimum version of bindgen that we supported.
Now that we bumped the minimum version of bindgen, that limitation does not apply anymore.
Thus replace the comment and simply write our minimum supported Rust version there, which is much simpler.
--- rust/Makefile | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)
rust/Makefile +2 -14
@@ -446,22 +446,10 @@ endif # architecture instead of generating `usize`. bindgen_c_flags_final = $(bindgen_c_flags_lto) -fno-builtin -D__BINDGEN__ -# Each `bindgen` release may upgrade the list of Rust target versions. By -# default, the highest stable release in their list is used. Thus we need to set -# a `--rust-target` to avoid future `bindgen` releases emitting code that -# `rustc` may not understand. On top of that, `bindgen` does not support passing -# an unknown Rust target version. -# -# Therefore, the Rust target for `bindgen` can be only as high as the minimum -# Rust version the kernel supports and only as high as the greatest stable Rust -# target supported by the minimum `bindgen` version the kernel supports (that -# is, if we do not test the actual `rustc`/`bindgen` versions running). -# -# Starting with `bindgen` 0.71.0, we will be able to set any future Rust version -# instead, i.e. we will be able to set here our minimum supported Rust version. +# `--rust-target` points to our minimum supported Rust version. quiet_cmd_bindgen = BINDGEN $@ cmd_bindgen = \ - $(BINDGEN) $< $(bindgen_target_flags) --rust-target 1.68 \ + $(BINDGEN) $< $(bindgen_target_flags) --rust-target 1.85 \ --use-core --with-derive-default --ctypes-prefix ffi --no-layout-tests \ --no-debug '.*' --enable-function-attribute-detection \ -o $@ -- $(bindgen_c_flags_final) -DMODULE \
Signature · 1 line
2.53.0
Re: [PATCH 17/33] rust: kbuild: update `bindgen --rust-target` version and replace comment
Quoted 7 lines · Miguel Ojeda
As the comment in the
Makefileexplains, previously, we needed to limit ourselves to the list of Rust versions known bybindgenfor its--rust-targetoption.In other words, we needed to consult the versions known by the minimum version of
bindgenthat we supported.
Quoted 7 lines
Now that we bumped the minimum version of
bindgen, that limitation does not apply anymore.Thus replace the comment and simply write our minimum supported Rust version there, which is much simpler.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- rust/Makefile | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)
Re: [PATCH 17/33] rust: kbuild: update `bindgen --rust-target` version and replace comment
In reply to Miguel OjedaQuoted 9 lines · Miguel Ojeda
As the comment in the
Makefileexplains, previously, we needed to limit ourselves to the list of Rust versions known bybindgenfor its--rust-targetoption.In other words, we needed to consult the versions known by the minimum version of
bindgenthat we supported.Now that we bumped the minimum version of
bindgen, that limitation does not apply anymore.
Some citations pointing to the upstream changes would be good.
Signature · 1 line
Tamir Duberstein <[email protected]>
Re: [PATCH 17/33] rust: kbuild: update `bindgen --rust-target` version and replace comment
Quoted 2 lines · Tamir Duberstein
Some citations pointing to the upstream changes would be good.
I added a couple links as usual, plus a reference to commit 7a5f93ea5862 ("rust: kbuild: set bindgen's Rust target version") that has most of the details.
[ The comment already mentioned the version, and the commit that added that message has the details, but I agree it is a good idea to add some references. ]
Cheers,
Miguel
Miguel Ojeda
maintainerPATCH 18/33 rust: kbuild: remove "dummy parameter" workaround for `bindgen` < 0.71.1
In reply to Miguel OjedaUntil the version bump of bindgen, we needed to pass a dummy parameter to avoid failing the --version call.
Thus remove it.
--- init/Kconfig | 7 +------ scripts/rust_is_available.sh | 8 +------- 2 files changed, 2 insertions(+), 13 deletions(-)
init/Kconfig +1 -6
@@ -2211,12 +2211,7 @@ config RUSTC_VERSION_TEXT config BINDGEN_VERSION_TEXT string depends on RUST - # The dummy parameter `workaround-for-0.69.0` is required to support 0.69.0 - # (https://github.com/rust-lang/rust-bindgen/pull/2678) and 0.71.0 - # (https://github.com/rust-lang/rust-bindgen/pull/3040). It can be removed - # when the minimum version is upgraded past the latter (0.69.1 and 0.71.1 - # both fixed the issue). - default "$(shell,$(BINDGEN) --version workaround-for-0.69.0 2>/dev/null)" + default "$(shell,$(BINDGEN) --version 2>/dev/null)" # # Place an empty function call at each tracepoint site. Can be
scripts/rust_is_available.sh +1 -7
@@ -121,14 +121,8 @@ fi # Check that the Rust bindings generator is suitable. # # Non-stable and distributions' versions may have a version suffix, e.g. `-dev`. -# -# The dummy parameter `workaround-for-0.69.0` is required to support 0.69.0 -# (https://github.com/rust-lang/rust-bindgen/pull/2678) and 0.71.0 -# (https://github.com/rust-lang/rust-bindgen/pull/3040). It can be removed when -# the minimum version is upgraded past the latter (0.69.1 and 0.71.1 both fixed -# the issue). rust_bindings_generator_output=$( \ - LC_ALL=C "$BINDGEN" --version workaround-for-0.69.0 2>/dev/null + LC_ALL=C "$BINDGEN" --version 2>/dev/null ) || rust_bindings_generator_code=$? if [ -n "$rust_bindings_generator_code" ]; then echo >&2 "***"
Signature · 1 line
2.53.0
Re: [PATCH 18/33] rust: kbuild: remove "dummy parameter" workaround for `bindgen` < 0.71.1
Quoted 6 lines · Miguel Ojeda
Until the version bump of
bindgen, we needed to pass a dummy parameter to avoid failing the--versioncall.Thus remove it.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 4 lines
--- init/Kconfig | 7 +------ scripts/rust_is_available.sh | 8 +------- 2 files changed, 2 insertions(+), 13 deletions(-)
Re: [PATCH 18/33] rust: kbuild: remove "dummy parameter" workaround for `bindgen` < 0.71.1
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
Until the version bump of
bindgen, we needed to pass a dummy parameter to avoid failing the--versioncall.Thus remove it.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 19/33 rust: kbuild: remove "`try` keyword" workaround for `bindgen` < 0.59.2
In reply to Miguel OjedaThere is a workaround that has not been needed, even already after commit 08ab786556ff ("rust: bindgen: upgrade to 0.65.1"), but it does not hurt.
Thus remove it.
--- rust/bindgen_parameters | 4 ---- 1 file changed, 4 deletions(-)
rust/bindgen_parameters +0 -4
@@ -15,10 +15,6 @@ --opaque-type x86_msi_data --opaque-type x86_msi_addr_lo -# `try` is a reserved keyword since Rust 2018; solved in `bindgen` v0.59.2, -# commit 2aed6b021680 ("context: Escape the try keyword properly"). ---opaque-type kunit_try_catch - # If SMP is disabled, `arch_spinlock_t` is defined as a ZST which triggers a Rust # warning. We don't need to peek into it anyway. --opaque-type spinlock
Signature · 1 line
2.53.0
Re: [PATCH 19/33] rust: kbuild: remove "`try` keyword" workaround for `bindgen` < 0.59.2
Quoted 6 lines · Miguel Ojeda
There is a workaround that has not been needed, even already after commit
08ab786556ff("rust: bindgen: upgrade to 0.65.1"), but it does not hurt.Thus remove it.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- rust/bindgen_parameters | 4 ---- 1 file changed, 4 deletions(-)
Re: [PATCH 19/33] rust: kbuild: remove "`try` keyword" workaround for `bindgen` < 0.59.2
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
There is a workaround that has not been needed, even already after commit
08ab786556ff("rust: bindgen: upgrade to 0.65.1"), but it does not hurt.Thus remove it.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 20/33 rust: kbuild: remove unneeded old `allow`s for generated layout tests
In reply to Miguel OjedaThe issue that required allows for cfg(test) code generated by bindgen for layout testing was fixed back in bindgen 0.60.0 [1], so it could have been removed even before the version bump, but it does not hurt.
Thus remove it now.
--- rust/bindings/lib.rs | 4 ---- rust/uapi/lib.rs | 4 ---- 2 files changed, 8 deletions(-)
rust/bindings/lib.rs +0 -4
@@ -9,10 +9,6 @@//! using this crate. #![no_std] -// See <https://github.com/rust-lang/rust-bindgen/issues/1651>. -#![cfg_attr(test, allow(deref_nullptr))] -#![cfg_attr(test, allow(unaligned_references))] -#![cfg_attr(test, allow(unsafe_op_in_unsafe_fn))] #![allow( clippy::all, missing_docs,
rust/uapi/lib.rs +0 -4
@@ -8,10 +8,6 @@//! userspace APIs. #![no_std] -// See <https://github.com/rust-lang/rust-bindgen/issues/1651>. -#![cfg_attr(test, allow(deref_nullptr))] -#![cfg_attr(test, allow(unaligned_references))] -#![cfg_attr(test, allow(unsafe_op_in_unsafe_fn))] #![allow( clippy::all, clippy::cast_lossless,
Signature · 1 line
2.53.0
Re: [PATCH 20/33] rust: kbuild: remove unneeded old `allow`s for generated layout tests
Quoted 9 lines · Miguel Ojeda
The issue that required
allows forcfg(test)code generated bybindgenfor layout testing was fixed back inbindgen0.60.0 [1], so it could have been removed even before the version bump, but it does not hurt.Thus remove it now.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 4 lines
--- rust/bindings/lib.rs | 4 ---- rust/uapi/lib.rs | 4 ---- 2 files changed, 8 deletions(-)
Re: [PATCH 20/33] rust: kbuild: remove unneeded old `allow`s for generated layout tests
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
The issue that required
allows forcfg(test)code generated bybindgenfor layout testing was fixed back inbindgen0.60.0 [1], so it could have been removed even before the version bump, but it does not hurt.
How about ordering this, the previous patch, and the next patch ahead of the version bump to avoid the need to mention it here?
Signature · 1 line
Tamir Duberstein <[email protected]>
Re: [PATCH 20/33] rust: kbuild: remove unneeded old `allow`s for generated layout tests
Quoted 3 lines · Tamir Duberstein
How about ordering this, the previous patch, and the next patch ahead of the version bump to avoid the need to mention it here?
That is reasonable, yeah.
Cheers,
Miguel
Miguel Ojeda
maintainerPATCH 21/33 gpu: nova-core: bindings: remove unneeded `cfg_attr`
In reply to Miguel OjedaThese were likely copied from the bindings and uapi crates, but are unneeded since there are no cfg(test)s in the bindings.
In addition, the issue that triggered the addition in those crates originally is also fixed in bindgen (please see the previous commit).
Thus remove them.
--- drivers/gpu/nova-core/gsp/fw/r570_144.rs | 3 --- 1 file changed, 3 deletions(-)
drivers/gpu/nova-core/gsp/fw/r570_144.rs +0 -3
@@ -7,9 +7,6 @@//! This module may not be directly used. Please abstract or re-export the needed symbols in the //! parent module instead. -#![cfg_attr(test, allow(deref_nullptr))] -#![cfg_attr(test, allow(unaligned_references))] -#![cfg_attr(test, allow(unsafe_op_in_unsafe_fn))] #![allow( dead_code, clippy::all,
Signature · 1 line
2.53.0
Re: [PATCH 21/33] gpu: nova-core: bindings: remove unneeded `cfg_attr`
Quoted 9 lines · Miguel Ojeda
These were likely copied from the
bindingsanduapicrates, but are unneeded since there are nocfg(test)s in the bindings.In addition, the issue that triggered the addition in those crates originally is also fixed in
bindgen(please see the previous commit).Thus remove them.
Signed-off-by Miguel Ojeda <[email protected]>
Re: [PATCH 21/33] gpu: nova-core: bindings: remove unneeded `cfg_attr`
In reply to Miguel OjedaQuoted 9 lines · Miguel Ojeda
These were likely copied from the
bindingsanduapicrates, but are unneeded since there are nocfg(test)s in the bindings.In addition, the issue that triggered the addition in those crates originally is also fixed in
bindgen(please see the previous commit).Thus remove them.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 2 lines
--- drivers/gpu/nova-core/gsp/fw/r570_144.rs | 3 ---
I believe drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs is generated manually and checked in to the source tree? It might be useful to actually have the command line and bindgen version used to generate the file present somewhere for knowing about possible compatibility issues like this one and reproducibility..
Best,
Gary
Quoted 1 line
1 file changed, 3 deletions(-)
Re: [PATCH 21/33] gpu: nova-core: bindings: remove unneeded `cfg_attr`
In reply to Miguel OjedaQuoted 9 lines · Miguel Ojeda
These were likely copied from the
bindingsanduapicrates, but are unneeded since there are nocfg(test)s in the bindings.In addition, the issue that triggered the addition in those crates originally is also fixed in
bindgen(please see the previous commit).Thus remove them.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 22/33 docs: rust: quick-start: openSUSE provides `rust-src` package nowadays
In reply to Miguel OjedaBoth openSUSE Tumbleweed and Slowroll provide the rust-src package nowadays [1].
Thus remove the version-specific one from the Quick Start guide.
--- Documentation/rust/quick-start.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/rust/quick-start.rst +1 -1
@@ -84,7 +84,7 @@ openSUSE openSUSE Slowroll and openSUSE Tumbleweed provide recent Rust releases and thus they should generally work out of the box, e.g.:: - zypper install rust rust1.79-src rust-bindgen clang + zypper install rust rust-src rust-bindgen clang Ubuntu
Signature · 1 line
2.53.0
Re: [PATCH 22/33] docs: rust: quick-start: openSUSE provides `rust-src` package nowadays
Quoted 4 lines · Miguel Ojeda
Both openSUSE Tumbleweed and Slowroll provide the
rust-srcpackage nowadays [1].Thus remove the version-specific one from the Quick Start guide.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 23/33 docs: rust: quick-start: update Ubuntu versioned packages
In reply to Miguel OjedaNow that the minimum supported Rust version is bumped, bump the versioned Rust packages [1][2][3][4] to that version for Ubuntu in the Quick Start guide.
In addition, add "may" to the RUST_LIB_SRC line since it does not look like it is needed from a quick test in a Ubuntu 24.04 LTS container.
--- Documentation/rust/quick-start.rst | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
Documentation/rust/quick-start.rst +14 -14
@@ -112,33 +112,33 @@ Though Ubuntu 24.04 LTS and older versions still provide recent Rust releases, they require some additional configuration to be set, using the versioned packages, e.g.:: - apt install rustc-1.80 rust-1.80-src bindgen-0.65 rustfmt-1.80 \ - rust-1.80-clippy - ln -s /usr/lib/rust-1.80/bin/rustfmt /usr/bin/rustfmt-1.80 - ln -s /usr/lib/rust-1.80/bin/clippy-driver /usr/bin/clippy-driver-1.80 + apt install rustc-1.85 rust-1.85-src bindgen-0.71 rustfmt-1.85 \ + rust-1.85-clippy + ln -s /usr/lib/rust-1.85/bin/rustfmt /usr/bin/rustfmt-1.85 + ln -s /usr/lib/rust-1.85/bin/clippy-driver /usr/bin/clippy-driver-1.85 None of these packages set their tools as defaults; therefore they should be specified explicitly, e.g.:: - make LLVM=1 RUSTC=rustc-1.80 RUSTDOC=rustdoc-1.80 RUSTFMT=rustfmt-1.80 \ - CLIPPY_DRIVER=clippy-driver-1.80 BINDGEN=bindgen-0.65 + make LLVM=1 RUSTC=rustc-1.85 RUSTDOC=rustdoc-1.85 RUSTFMT=rustfmt-1.85 \ + CLIPPY_DRIVER=clippy-driver-1.85 BINDGEN=bindgen-0.71 -Alternatively, modify the ``PATH`` variable to place the Rust 1.80 binaries +Alternatively, modify the ``PATH`` variable to place the Rust 1.85 binaries first and set ``bindgen`` as the default, e.g.:: - PATH=/usr/lib/rust-1.80/bin:$PATH + PATH=/usr/lib/rust-1.85/bin:$PATH update-alternatives --install /usr/bin/bindgen bindgen \ - /usr/bin/bindgen-0.65 100 - update-alternatives --set bindgen /usr/bin/bindgen-0.65 + /usr/bin/bindgen-0.71 100 + update-alternatives --set bindgen /usr/bin/bindgen-0.71 -``RUST_LIB_SRC`` needs to be set when using the versioned packages, e.g.:: +``RUST_LIB_SRC`` may need to be set when using the versioned packages, e.g.:: - RUST_LIB_SRC=/usr/src/rustc-$(rustc-1.80 --version | cut -d' ' -f2)/library + RUST_LIB_SRC=/usr/src/rustc-$(rustc-1.85 --version | cut -d' ' -f2)/library For convenience, ``RUST_LIB_SRC`` can be exported to the global environment. -In addition, ``bindgen-0.65`` is available in newer releases (24.04 LTS and -24.10), but it may not be available in older ones (20.04 LTS and 22.04 LTS), +In addition, ``bindgen-0.71`` is available in newer releases (24.04 LTS), +but it may not be available in older ones (20.04 LTS and 22.04 LTS), thus ``bindgen`` may need to be built manually (please see below).
Signature · 1 line
2.53.0
Re: [PATCH 23/33] docs: rust: quick-start: update Ubuntu versioned packages
Quoted 6 lines · Miguel Ojeda
Now that the minimum supported Rust version is bumped, bump the versioned Rust packages [1][2][3][4] to that version for Ubuntu in the Quick Start guide.
In addition, add "may" to the
RUST_LIB_SRCline since it does not look like it is needed from a quick test in a Ubuntu 24.04 LTS container.
RUST_LIB_SRC is also mentioned in the nix section, do you know if it is still needed there?
Signature · 1 line
Tamir Duberstein <[email protected]>
Re: [PATCH 23/33] docs: rust: quick-start: update Ubuntu versioned packages
Quoted 3 lines · Tamir Duberstein
RUST_LIB_SRCis also mentioned in the nix section, do you know if it is still needed there?
Yeah, that would be nice to know.
I tried on my own, and it does seem still required (at least with those packages mentioned in the example). But perhaps a Nix user knows of a better way to do it, anyway.
So I kept it.
By the way, I think it would be nice to have a "standard", well-maintained shell.nix (or a flake or whatever is best nowadays) in the kernel tree somewhere, i.e. one that is known to work, that covers most tooling used in the kernel, etc.
Cheers,
Miguel
Gary Guo
maintainerRe: [PATCH 23/33] docs: rust: quick-start: update Ubuntu versioned packages
Quoted 6 lines · Miguel Ojeda
Quoted 3 lines · Tamir Duberstein
RUST_LIB_SRCis also mentioned in the nix section, do you know if it is still needed there?Yeah, that would be nice to know.
It's still required. It's used here:
https://github.com/NixOS/nixpkgs/blob/acf7ae578589bb8bdd6f9273141d7053fed84bed/pkgs/os-specific/linux/kernel/generic.nix#L186
Quoted 7 lines
I tried on my own, and it does seem still required (at least with those packages mentioned in the example). But perhaps a Nix user knows of a better way to do it, anyway.
So I kept it.
Quoted 7 lines
By the way, I think it would be nice to have a "standard", well-maintained
shell.nix(or a flake or whatever is best nowadays) in the kernel tree somewhere, i.e. one that is known to work, that covers most tooling used in the kernel, etc.Cheers,
Miguel
I have my dev shell here in case it helps:
https://github.com/nbdd0121/nix-collection/blob/trunk/dev/linux.nix
It makes use of oxalica's rust-overlay. It can be used with shell.nix by a fetchTarball, but for obvious reasons you want that to be pinned and not be fetching latest version everytime.
Flake is good for pinning, but using flake is a two-edged sword -- it both gives you superb reproducibility so years down the line you can still build an old environment (assuming the source tarballs used are still available or NixOS cache server still has a copy).
But it also means that it can be outdated. So people (myself included) usually combine pinning + regular updating by having flake.lock routinely updated. I'm not sure that really fits well inside kernel.
If we don't use anything outside nixpkgs though, we can use "channel" feature of imperative nix which says import <nixpkgs> will import user's local nixpkgs version. A shell.nix using only that should work, but it will only be able to use latest rustc/clippy/cargo/bindgen in nixpkgs and won't be able to include things like klint.
Perhaps having a repo in rust-for-linux GitHub org (or somewhere else in kernel.org SCM) where we can point people to?
Best,
Gary
Re: [PATCH 23/33] docs: rust: quick-start: update Ubuntu versioned packages
Quoted 2 lines · Gary Guo
It's still required.
Thanks for confirming!
Quoted 2 lines
Perhaps having a repo in rust-for-linux GitHub org (or somewhere else in kernel.org SCM) where we can point people to?
...and for all these details :)
I agree that it doesn't fit perfectly within the kernel, but an update every kernel cycle or so should be fine, I think, if you think that is enough.
Otherwise, regarding the repository, that sounds great to me -- we already had an old https://github.com/Rust-for-Linux/nix and
https://github.com/Rust-for-Linux/nixpkgs. Not sure if Fiona (Cc'd) wants them, but perhaps you could reuse them (otherwise we should archive them).
Cheers,
Miguel
Miguel Ojeda
maintainerPATCH 24/33 docs: rust: quick-start: update minimum Ubuntu version
In reply to Miguel OjedaUbuntu 25.04 is out of support [1], and Ubuntu 25.10 is the latest supported one.
Moreover, Ubuntu 25.10 is the first that provides a recent enough Rust given the minimum bump -- they provide 1.85.1 [2].
Thus update it.
--- Documentation/rust/quick-start.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/rust/quick-start.rst +1 -1
@@ -90,7 +90,7 @@ they should generally work out of the box, e.g.:: Ubuntu ****** -25.04 +25.10 ~~~~~ The latest Ubuntu releases provide recent Rust releases and thus they should
Signature · 1 line
2.53.0
Re: [PATCH 24/33] docs: rust: quick-start: update minimum Ubuntu version
Quoted 9 lines · Miguel Ojeda
Ubuntu 25.04 is out of support [1], and Ubuntu 25.10 is the latest supported one.
Moreover, Ubuntu 25.10 is the first that provides a recent enough Rust given the minimum bump -- they provide 1.85.1 [2].
Thus update it.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 25/33 docs: rust: quick-start: add Ubuntu 26.04 LTS and remove subsection title
In reply to Miguel OjedaUbuntu 26.04 LTS (Resolute Raccoon) is scheduled to be released in a few weeks [1], and it has a recent enough Rust toolchain, just like Ubuntu 25.10 has [2][3].
We could update the title and the paragraph, but to simplify and to make it more consistent with the other distributions' sections, let's instead just remove that title. It will also reduce the differences later on to keep it updated. Eventually, when we remove the remaining subsection for older LTSs, Ubuntu should be a small section like the other distributions.
Thus remove the title and add the mention of Ubuntu 26.04 LTS.
--- Documentation/rust/quick-start.rst | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
Documentation/rust/quick-start.rst +1 -4
@@ -90,10 +90,7 @@ they should generally work out of the box, e.g.:: Ubuntu ****** -25.10 -~~~~~ - -The latest Ubuntu releases provide recent Rust releases and thus they should +Ubuntu 25.10 and 26.04 LTS provide recent Rust releases and thus they should generally work out of the box, e.g.:: apt install rustc rust-src bindgen rustfmt rust-clippy
Signature · 1 line
2.53.0
Re: [PATCH 25/33] docs: rust: quick-start: add Ubuntu 26.04 LTS and remove subsection title
Quoted 4 lines · Miguel Ojeda
Ubuntu 26.04 LTS (Resolute Raccoon) is scheduled to be released in a few weeks [1], and it has a recent enough Rust toolchain, just like Ubuntu 25.10 has [2][3].
Quoted 8 lines
We could update the title and the paragraph, but to simplify and to make it more consistent with the other distributions' sections, let's instead just remove that title. It will also reduce the differences later on to keep it updated. Eventually, when we remove the remaining subsection for older LTSs, Ubuntu should be a small section like the other distributions.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 26/33 docs: rust: quick-start: remove Gentoo "testing" note
In reply to Miguel OjedaGentoo does not need the "testing" note, since its packages are recent enough even in the stable branch [1][2].
Thus remove it to simplify the documentation.
--- Documentation/rust/quick-start.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Documentation/rust/quick-start.rst +2 -2
@@ -57,8 +57,8 @@ of the box, e.g.:: Gentoo Linux ************ -Gentoo Linux (and especially the testing branch) provides recent Rust releases -and thus it should generally work out of the box, e.g.:: +Gentoo Linux provides recent Rust releases and thus it should generally work out +of the box, e.g.:: USE='rust-src rustfmt clippy' emerge dev-lang/rust dev-util/bindgen
Signature · 1 line
2.53.0
Re: [PATCH 26/33] docs: rust: quick-start: remove Gentoo "testing" note
Quoted 4 lines · Miguel Ojeda
Gentoo does not need the "testing" note, since its packages are recent enough even in the stable branch [1][2].
Thus remove it to simplify the documentation.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 27/33 docs: rust: quick-start: remove Nix "unstable channel" note
In reply to Miguel OjedaNix does not need the "unstable channel" note, since its packages are recent enough even in the stable channel [1][2].
Thus remove it to simplify the documentation.
--- Documentation/rust/quick-start.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Documentation/rust/quick-start.rst +2 -2
@@ -68,8 +68,8 @@ of the box, e.g.:: Nix *** -Nix (unstable channel) provides recent Rust releases and thus it should -generally work out of the box, e.g.:: +Nix provides recent Rust releases and thus it should generally work out of the +box, e.g.:: { pkgs ? import <nixpkgs> {} }: pkgs.mkShell {
Signature · 1 line
2.53.0
Re: [PATCH 27/33] docs: rust: quick-start: remove Nix "unstable channel" note
Quoted 8 lines · Miguel Ojeda
Nix does not need the "unstable channel" note, since its packages are recent enough even in the stable channel [1][2].
Thus remove it to simplify the documentation.
Quoted 3 lines
--- Documentation/rust/quick-start.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Re: [PATCH 27/33] docs: rust: quick-start: remove Nix "unstable channel" note
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
Nix does not need the "unstable channel" note, since its packages are recent enough even in the stable channel [1][2].
Thus remove it to simplify the documentation.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 28/33 docs: rust: quick-start: remove GDB/Binutils mention
In reply to Miguel OjedaThe versions provided nowadays by even a distribution like Debian Stable (and Debian Old Stable) are newer than those mentioned [1].
Thus remove the workaround.
Note that the minimum binutils version in the kernel is still 2.30, so one could argue part of the note is still relevant, but it is unlikely a kernel developer using such an old binutils is enabling Rust on a modern kernel, especially when using distribution toolchains, e.g. the Rust minimum version is not satisfied by Debian Old Stable.
So we are at the point where keeping the docs short and relevant for essentially everyone is probably the better trade-off.
--- Documentation/rust/quick-start.rst | 9 --------- 1 file changed, 9 deletions(-)
Documentation/rust/quick-start.rst +0 -9
@@ -352,12 +352,3 @@ Hacking To dive deeper, take a look at the source code of the samples at ``samples/rust/``, the Rust support code under ``rust/`` and the ``Rust hacking`` menu under ``Kernel hacking``. - -If GDB/Binutils is used and Rust symbols are not getting demangled, the reason -is the toolchain does not support Rust's new v0 mangling scheme yet. -There are a few ways out: - -- Install a newer release (GDB >= 10.2, Binutils >= 2.36). - -- Some versions of GDB (e.g. vanilla GDB 10.1) are able to use - the pre-demangled names embedded in the debug info (``CONFIG_DEBUG_INFO``).
Signature · 1 line
2.53.0
Re: [PATCH 28/33] docs: rust: quick-start: remove GDB/Binutils mention
Quoted 10 lines · Miguel Ojeda
The versions provided nowadays by even a distribution like Debian Stable (and Debian Old Stable) are newer than those mentioned [1].
Thus remove the workaround.
Note that the minimum binutils version in the kernel is still 2.30, so one could argue part of the note is still relevant, but it is unlikely a kernel developer using such an old binutils is enabling Rust on a modern kernel, especially when using distribution toolchains, e.g. the Rust minimum version is not satisfied by Debian Old Stable.
I suppose people could have been using an old LTS distro + rustup and run into this issue. Albeit it's probably quite unlikely.
Quoted 28 lines
So we are at the point where keeping the docs short and relevant for essentially everyone is probably the better trade-off.
Link https://lore.kernel.org/all/CANiq72mCpc9=2TN_zC4NeDMpFQtPXAFvyiP+gRApg2vzspPWmw@mail.gmail.com/ open hereSigned-off-by Miguel Ojeda <[email protected]>--- Documentation/rust/quick-start.rst | 9 --------- 1 file changed, 9 deletions(-)Documentation/rust/quick-start.rst +0
-9@@ -352,12 +352,3 @@ Hacking To dive deeper, take a look at the source code of the samples at ``samples/rust/``, the Rust support code under ``rust/`` and the ``Rust hacking`` menu under ``Kernel hacking``. - -If GDB/Binutils is used and Rust symbols are not getting demangled, the reason -is the toolchain does not support Rust's new v0 mangling scheme yet. -There are a few ways out: - -- Install a newer release (GDB >= 10.2, Binutils >= 2.36). - -- Some versions of GDB (e.g. vanilla GDB 10.1) are able to use - the pre-demangled names embedded in the debug info (``CONFIG_DEBUG_INFO``).
Re: [PATCH 28/33] docs: rust: quick-start: remove GDB/Binutils mention
In reply to Miguel OjedaQuoted 5 lines · Miguel Ojeda
The versions provided nowadays by even a distribution like Debian Stable (and Debian Old Stable) are newer than those mentioned [1].
Thus remove the workaround.
Quoted 7 lines
Note that the minimum binutils version in the kernel is still 2.30, so one could argue part of the note is still relevant, but it is unlikely a kernel developer using such an old binutils is enabling Rust on a modern kernel, especially when using distribution toolchains, e.g. the Rust minimum version is not satisfied by Debian Old Stable.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 29/33 docs: rust: general-information: simplify Kconfig example
In reply to Miguel OjedaThere is no need to use def_bool y if <expr> -- one can simply write def_bool <expr>.
In fact, the simpler form is how we actually use them in practice in init/Kconfig.
Thus simplify the example.
--- Documentation/rust/general-information.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/rust/general-information.rst +1 -1
@@ -158,4 +158,4 @@ numerical comparisons, one may define a new Kconfig symbol: .. code-block:: kconfig config RUSTC_VERSION_MIN_107900 - def_bool y if RUSTC_VERSION >= 107900 + def_bool RUSTC_VERSION >= 107900
Signature · 1 line
2.53.0
Re: [PATCH 29/33] docs: rust: general-information: simplify Kconfig example
Quoted 9 lines · Miguel Ojeda
There is no need to use
def_bool y if <expr>-- one can simply writedef_bool <expr>.In fact, the simpler form is how we actually use them in practice in
init/Kconfig.Thus simplify the example.
Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- Documentation/rust/general-information.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Re: [PATCH 29/33] docs: rust: general-information: simplify Kconfig example
In reply to Miguel OjedaQuoted 9 lines · Miguel Ojeda
There is no need to use
def_bool y if <expr>-- one can simply writedef_bool <expr>.In fact, the simpler form is how we actually use them in practice in
init/Kconfig.Thus simplify the example.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 30/33 docs: rust: general-information: use real example
In reply to Miguel OjedaCurrently the example in the documentation shows a version-based name for the Kconfig example:
RUSTC_VERSION_MIN_107900
The reason behind it was to possibly avoid repetition in case several features used the same minimum.
However, we ended up preferring to give them a descriptive name for each feature added even if that could lead to some repetition. In practice, the repetition has not happened so far, and even if it does at some point, it is not a big deal.
Thus replace the example in the documentation with one of our current examples (after removing previous ones from the bump), to show how they actually look like, and in case someone greps for it.
In addition, it has the advantage that it shows the RUSTC_HAS_* pattern we follow in init/Kconfig, similar to the C side.
--- Documentation/rust/general-information.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Documentation/rust/general-information.rst +2 -2
@@ -157,5 +157,5 @@ numerical comparisons, one may define a new Kconfig symbol: .. code-block:: kconfig - config RUSTC_VERSION_MIN_107900 - def_bool RUSTC_VERSION >= 107900 + config RUSTC_HAS_SPAN_FILE + def_bool RUSTC_VERSION >= 108800
Signature · 1 line
2.53.0
Re: [PATCH 30/33] docs: rust: general-information: use real example
Quoted 13 lines · Miguel Ojeda
Currently the example in the documentation shows a version-based name for the
Kconfigexample:RUSTC_VERSION_MIN_107900The reason behind it was to possibly avoid repetition in case several features used the same minimum.
However, we ended up preferring to give them a descriptive name for each feature added even if that could lead to some repetition. In practice, the repetition has not happened so far, and even if it does at some point, it is not a big deal.
Quoted 8 lines
Thus replace the example in the documentation with one of our current examples (after removing previous ones from the bump), to show how they actually look like, and in case someone
greps for it.In addition, it has the advantage that it shows the
RUSTC_HAS_*pattern we follow ininit/Kconfig, similar to the C side.Signed-off-by Miguel Ojeda <[email protected]>
Quoted 3 lines
--- Documentation/rust/general-information.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Re: [PATCH 30/33] docs: rust: general-information: use real example
In reply to Miguel OjedaQuoted 9 lines · Miguel Ojeda
Currently the example in the documentation shows a version-based name for the
Kconfigexample:RUSTC_VERSION_MIN_107900The reason behind it was to possibly avoid repetition in case several features used the same minimum.
[...]
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 31/33 rust: declare cfi_encoding for lru_status
In reply to Miguel OjedaFrom: Alice Ryhl <[email protected]>
By default bindgen will convert 'enum lru_status' into a typedef for an integer. For the most part, an integer of the same size as the enum results in the correct ABI, but in the specific case of CFI, that is not the case. The CFI encoding is supposed to be the same as a struct called 'lru_status' rather than the name of the underlying native integer type.
To fix this, tell bindgen to generate a newtype and set the CFI type explicitly. Note that we need to set the CFI attribute explicitly as bindgen is using repr(transparent), which is otherwise identical to the inner type for ABI purposes.
This allows us to remove the page range helper C function in Binder without risking a CFI failure when list_lru_walk calls the provided function pointer.
The --with-attribute-custom-enum argument requires bindgen v0.71 or greater.
[ In particular, the feature was added in 0.71.0 [1][2].
In addition, feature(cfi_encoding) has been available since Rust 1.71.0 [3].
- Miguel ]
My testing procedure was to add this to the android17-6.18 branch and verify that rust_shrink_free_page is successfully called without crash, and verify that it does in fact crash when the cfi_encoding is set to other values. Note that I couldn't test this on android16-6.12 as that branch uses a bindgen version that is too old.
[ Rebased on top of the minimum Rust version bump series which provide
the required bindgen version. - Miguel ]
--- drivers/android/binder/Makefile | 3 +-- drivers/android/binder/page_range.rs | 6 +++--- drivers/android/binder/page_range_helper.c | 24 ---------------------- drivers/android/binder/page_range_helper.h | 15 -------------- rust/bindgen_parameters | 4 ++++ rust/bindings/bindings_helper.h | 1 - rust/bindings/lib.rs | 1 + rust/uapi/lib.rs | 1 + 8 files changed, 10 insertions(+), 45 deletions(-) delete mode 100644 drivers/android/binder/page_range_helper.c delete mode 100644 drivers/android/binder/page_range_helper.h
drivers/android/binder/Makefile +1 -2
@@ -5,5 +5,4 @@ obj-$(CONFIG_ANDROID_BINDER_IPC_RUST) += rust_binder.o rust_binder-y := \ rust_binder_main.o \ rust_binderfs.o \ - rust_binder_events.o \ - page_range_helper.o + rust_binder_events.o
drivers/android/binder/page_range.rs +3 -3
@@ -642,15 +642,15 @@ fn drop(self: Pin<&mut Self>) {unsafe { bindings::list_lru_walk ( list_lru, -Some (bindings::rust_shrink_free_page_wrap), +Some (rust_shrink_free_page), ptr::null_mut (), nr_to_scan, ) } } -const LRU_SKIP : bindings::lru_status = bindings::lru_status_LRU_SKIP; -const LRU_REMOVED_ENTRY : bindings::lru_status = bindings::lru_status_LRU_REMOVED_RETRY; +const LRU_SKIP : bindings::lru_status = bindings::lru_status::LRU_SKIP ; +const LRU_REMOVED_ENTRY : bindings::lru_status = bindings::lru_status::LRU_REMOVED_RETRY ;/// # Safety /// Called by the shrinker.
drivers/android/binder/page_range_helper.c deleted +0 -24
@@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 - -/* C helper for page_range.rs to work around a CFI violation. -* -* Bindgen currently pretends that `enum lru_status` is the same as an integer. -* This assumption is fine ABI-wise, but once you add CFI to the mix, it -* triggers a CFI violation because `enum lru_status` gets a different CFI tag. -* -* This file contains a workaround until bindgen can be fixed. -* -* Copyright (C) 2025 Google LLC. -*/ -#include "page_range_helper.h" - -unsigned int rust_shrink_free_page (struct list_head *item, -struct list_lru_one *list, -void *cb_arg); - -enum lru_status -rust_shrink_free_page_wrap (struct list_head *item,struct list_lru_one *list, -void *cb_arg) -{ -return rust_shrink_free_page (item, list, cb_arg); -}
drivers/android/binder/page_range_helper.h deleted +0 -15
@@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* -* Copyright (C) 2025 Google, Inc. -*/ - -#ifndef _LINUX_PAGE_RANGE_HELPER_H -#define _LINUX_PAGE_RANGE_HELPER_H - -#include <linux/list_lru.h> - -enum lru_status -rust_shrink_free_page_wrap (struct list_head *item,struct list_lru_one *list, -void *cb_arg); - -#endif /* _LINUX_PAGE_RANGE_HELPER_H */
rust/bindgen_parameters +4 -0
@@ -19,6 +19,10 @@ # warning. We don't need to peek into it anyway. --opaque-type spinlock +# enums that appear in indirect function calls should specify a cfi type +--newtype-enum lru_status +--with-attribute-custom-enum=lru_status='#[cfi_encoding="10lru_status"]' + # `seccomp`'s comment gets understood as a doctest --no-doc-comments
rust/bindings/bindings_helper.h +0 -1
@@ -149,5 +149,4 @@ const vm_flags_t RUST_CONST_HELPER_VM_NOHUGEPAGE = VM_NOHUGEPAGE;#if IS_ENABLED (CONFIG_ANDROID_BINDER_IPC_RUST )#include "../../drivers/android/binder/rust_binder.h" #include "../../drivers/android/binder/rust_binder_events.h" -#include "../../drivers/android/binder/page_range_helper.h" #endif
rust/bindings/lib.rs +1 -0
@@ -19,6 +19,7 @@ unreachable_pub, unsafe_op_in_unsafe_fn )] +#![feature(cfi_encoding)] #[allow(dead_code)] #[allow(clippy::cast_lossless)]
rust/uapi/lib.rs +1 -0
@@ -24,6 +24,7 @@ unsafe_op_in_unsafe_fn )]#![cfg_attr( CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES , allow(unnecessary_transmutes))] +#![feature(cfi_encoding)] // Manual definition of blocklisted types. type __kernel_size_t =usize ;
Signature · 1 line
2.53.0
Re: [PATCH 31/33] rust: declare cfi_encoding for lru_status
Quoted 37 lines · Miguel Ojeda
From: Alice Ryhl <[email protected]>
By default bindgen will convert 'enum
lru_status' into a typedef for an integer. For the most part, an integer of the same size as the enum results in the correct ABI, but in the specific case of CFI, that is not the case. The CFI encoding is supposed to be the same as a struct called 'lru_status' rather than the name of the underlying native integer type.To fix this, tell bindgen to generate a newtype and set the CFI type explicitly. Note that we need to set the CFI attribute explicitly as bindgen is using repr(transparent), which is otherwise identical to the inner type for ABI purposes.
This allows us to remove the page range helper C function in Binder without risking a CFI failure when
list_lru_walkcalls the provided function pointer.The --with-attribute-custom-enum argument requires bindgen v0.71 or greater.
[ In particular, the feature was added in 0.71.0 [1][2].
In addition,
feature(cfi_encoding)has been available since Rust 1.71.0 [3].- Miguel ]
My testing procedure was to add this to the android17-6.18 branch and verify that
rust_shrink_free_pageis successfully called without crash, and verify that it does in fact crash when thecfi_encodingis set to other values. Note that I couldn't test this on android16-6.12 as that branch uses a bindgen version that is too old.
Quoted 5 lines
Signed-off-by Alice Ryhl <[email protected]>[ Rebased on top of the minimum Rust version bump series which provide
the requiredbindgenversion. - Miguel ]Signed-off-by Miguel Ojeda <[email protected]>
Quoted 12 lines
--- drivers/android/binder/Makefile | 3 +-- drivers/android/binder/page_range.rs | 6 +++--- drivers/android/binder/page_range_helper.c | 24 ---------------------- drivers/android/binder/page_range_helper.h | 15 -------------- rust/bindgen_parameters | 4 ++++ rust/bindings/bindings_helper.h | 1 - rust/bindings/lib.rs | 1 + rust/uapi/lib.rs | 1 + 8 files changed, 10 insertions(+), 45 deletions(-) delete mode 100644 drivers/android/binder/page_range_helper.c delete mode 100644 drivers/android/binder/page_range_helper.h
Miguel Ojeda
maintainerPATCH 32/33 rust: kbuild: support global per-version flags
In reply to Miguel OjedaSometimes it is useful to gate global Rust flags per compiler version. For instance, we may want to disable a lint that has false positives in a single version [1].
We already had helpers like rustc-min-version for that, which we use elsewhere, but we cannot currently use them for rust_common_flags, which contains the global flags for all Rust code (kernel and host), because rustc-min-version depends on CONFIG_RUSTC_VERSION, which does not exist when rust_common_flags is defined.
Thus, to support that, introduce rust_common_flags_per_version, defined after the include/config/auto.conf inclusion (where CONFIG_RUSTC_VERSION becomes available), and append it to rust_common_flags, KBUILD_HOSTRUSTFLAGS and KBUILD_RUSTFLAGS.
An alternative is moving all those three down, but that would mean separating them from the other KBUILD_* variables.
--- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+)
Makefile +8 -0
@@ -834,6 +834,14 @@ endif # CONFIG_TRACEPOINTS export WARN_ON_UNUSED_TRACEPOINTS +# Per-version Rust flags. These are like `rust_common_flags`, but may +# depend on the Rust compiler version (e.g. using `rustc-min-version`). +rust_common_flags_per_version := + +rust_common_flags += $(rust_common_flags_per_version) +KBUILD_HOSTRUSTFLAGS += $(rust_common_flags_per_version) +KBUILD_RUSTFLAGS += $(rust_common_flags_per_version) + include $(srctree)/arch/$(SRCARCH)/Makefile ifdef need-config
Signature · 1 line
2.53.0
Gary Guo
maintainerRe: [PATCH 32/33] rust: kbuild: support global per-version flags
Quoted 10 lines · Miguel Ojeda
Sometimes it is useful to gate global Rust flags per compiler version. For instance, we may want to disable a lint that has false positives in a single version [1].
We already had helpers like
rustc-min-versionfor that, which we use elsewhere, but we cannot currently use them forrust_common_flags, which contains the global flags for all Rust code (kernel and host), becauserustc-min-versiondepends onCONFIG_RUSTC_VERSION, which does not exist whenrust_common_flagsis defined.
Quoted 7 lines
Thus, to support that, introduce
rust_common_flags_per_version, defined after theinclude/config/auto.confinclusion (whereCONFIG_RUSTC_VERSIONbecomes available), and append it torust_common_flags,KBUILD_HOSTRUSTFLAGSandKBUILD_RUSTFLAGS.An alternative is moving all those three down, but that would mean separating them from the other
KBUILD_*variables.
I think I would prefer moving these down.
The current approach append the flags to all variables, which will cause the following equivalence to stop holding after the flag update.
KBUILD_HOSTRUSTFLAGS := $(rust_common_flags) -O -Cstrip=debuginfo \ -Zallow-features= $(HOSTRUSTFLAGS)
(Per version flags doesn't go before -O anymore, it comes after HOSTRUSTFLAGS).
Best,
Gary
Quoted 27 lines
Link https://lore.kernel.org/rust-for-linux/CANiq72mWdFU11GcCZRchzhy0Gi1QZShvZtyRkHV2O+WA2uTdVQ@mail.gmail.com/ [1] open hereSigned-off-by Miguel Ojeda <[email protected]>--- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+)Makefile +8
-0@@ -834,6 +834,14 @@ endif # CONFIG_TRACEPOINTS export WARN_ON_UNUSED_TRACEPOINTS +# Per-version Rust flags. These are like `rust_common_flags`, but may +# depend on the Rust compiler version (e.g. using `rustc-min-version`). +rust_common_flags_per_version := + +rust_common_flags += $(rust_common_flags_per_version) +KBUILD_HOSTRUSTFLAGS += $(rust_common_flags_per_version) +KBUILD_RUSTFLAGS += $(rust_common_flags_per_version) + include $(srctree)/arch/$(SRCARCH)/Makefile ifdef need-config
Re: [PATCH 32/33] rust: kbuild: support global per-version flags
Quoted 10 lines · Gary Guo
I think I would prefer moving these down.
The current approach append the flags to all variables, which will cause the following equivalence to stop holding after the flag update.
KBUILD_HOSTRUSTFLAGS := $(rust_common_flags) -O -Cstrip=debuginfo \ -Zallow-features= $(HOSTRUSTFLAGS)(Per version flags doesn't go before -O anymore, it comes after HOSTRUSTFLAGS).
[ For context for others, Sashiko reported the same and we also talked about it in a Rust for Linux call. ]
I have been thinking about this, and about potential other ways to achieve the same thing. I think the best at the moment is to move just the $(HOSTRUSTFLAGS) below, but not the rest.
The reason is that it is closer to what we do with other user (kernel) flags (e.g. arch flags come after the general ones). But I am wondering if we should/could set all the user variables later in the Makefile in general HOST*FLAGS later in the Makefile.
In fact, there is already a limitation with the host flags: -Werror, i.e. that one gets appended later, and so users cannot override it.
This may be considered a bug, because commit 7ded7d37e5f5 ("scripts/Makefile.extrawarn: Respect CONFIG_WERROR / W=e for hostprogs") says:
While it is
possible to avoid this behavior by passing HOSTCFLAGS=-w or HOSTCFLAGS=-Wno-error, it may not be the most intuitive for regular users not intimately familiar with Kbuild.
But passing HOSTCFLAGS=-Wno-error doesn't work, since it comes earlier (-w does work, but because it turns off everything).
I am also a bit confused with:
While this means there is a small portion of
the build that does not have -Werror enabled (namely scripts/kconfig/* and scripts/basic/fixdep)
because it gets enabled in the build (I think it is referring to other targets like the config ones).
Anyway, for now I moved the expansion of HOSTRUSTFLAGS in v2. If Kbuild (Nathan, Nicolas) think it is a good idea to do one of the bigger changes (e.g. for more HOST* flags, appending it even later), then we can do it afterwards.
Cheers,
Miguel
Gary Guo
maintainerRe: [PATCH 32/33] rust: kbuild: support global per-version flags
Quoted 19 lines · Miguel Ojeda
Quoted 10 lines · Gary Guo
I think I would prefer moving these down.
The current approach append the flags to all variables, which will cause the following equivalence to stop holding after the flag update.
KBUILD_HOSTRUSTFLAGS := $(rust_common_flags) -O -Cstrip=debuginfo \ -Zallow-features= $(HOSTRUSTFLAGS)(Per version flags doesn't go before -O anymore, it comes after HOSTRUSTFLAGS).
[ For context for others, Sashiko reported the same and we also talked about it in a Rust for Linux call. ]
I have been thinking about this, and about potential other ways to achieve the same thing. I think the best at the moment is to move just the
$(HOSTRUSTFLAGS)below, but not the rest.
Quoted 7 lines
The reason is that it is closer to what we do with other user (kernel) flags (e.g. arch flags come after the general ones). But I am wondering if we should/could set all the user variables later in the
Makefilein generalHOST*FLAGSlater in theMakefile.In fact, there is already a limitation with the host flags:
-Werror, i.e. that one gets appended later, and so users cannot override it.
I cared a bit more about the code clarity (where appending to all variables feel like a hack, while moving the code block is natural).
Best,
Gary
Quoted 9 lines
[...]
Anyway, for now I moved the expansion of
HOSTRUSTFLAGSin v2. IfKbuild(Nathan, Nicolas) think it is a good idea to do one of the bigger changes (e.g. for moreHOST*flags, appending it even later), then we can do it afterwards.Cheers,
Miguel
Tamir Duberstein
reviewerRe: [PATCH 32/33] rust: kbuild: support global per-version flags
In reply to Miguel OjedaQuoted 7 lines · Miguel Ojeda
[...]
defined after theinclude/config/auto.confinclusion (whereCONFIG_RUSTC_VERSIONbecomes available), and append it torust_common_flags,KBUILD_HOSTRUSTFLAGSandKBUILD_RUSTFLAGS.An alternative is moving all those three down, but that would mean separating them from the other
KBUILD_*variables.
My prefernece is avoiding duplication over grouping, but either choice should be justified by a code comment that acknowledges the duplication/inconsisntecy.
Signature · 1 line
Tamir Duberstein <[email protected]>
Miguel Ojeda
maintainerPATCH 33/33 rust: kbuild: allow `clippy::precedence` for Rust < 1.86.0
In reply to Miguel OjedaThe Clippy precedence lint was extended in Rust 1.85.0 to include bitmasking and shift operations [1]. However, because it generated many hits, in Rust 1.86.0 it was split into a new precedence_bits lint which is not enabled by default [2].
In other words, only Rust 1.85 has a different behavior. For instance, it reports:
warning: operator precedence can trip the unwary
--> drivers/gpu/nova-core/fb/hal/ga100.rs:16:5
|
16 | / u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::read(bar).adr_39_08()) << FLUSH_SYSMEM_ADDR_SHIFT
17 | | | u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI::read(bar).adr_63_40())
18 | | << FLUSH_SYSMEM_ADDR_SHIFT_HI
| |_________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence
= note: `-W clippy::precedence` implied by `-W clippy::all`
= help: to override `-W clippy::all` add `#[allow(clippy::precedence)]`
help: consider parenthesizing your expression
|
16 ~ (u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::read(bar).adr_39_08()) << FLUSH_SYSMEM_ADDR_SHIFT) | (u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI::read(bar).adr_63_40())
17 + << FLUSH_SYSMEM_ADDR_SHIFT_HI)
|
warning: operator precedence can trip the unwary
--> drivers/gpu/nova-core/vbios.rs:511:17
|
511 | / u32::from(data[29]) << 24
512 | | | u32::from(data[28]) << 16
513 | | | u32::from(data[27]) << 8
| |______________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence
help: consider parenthesizing your expression
|
511 ~ u32::from(data[29]) << 24
512 + | u32::from(data[28]) << 16 | (u32::from(data[27]) << 8)
|
warning: operator precedence can trip the unwary
--> drivers/gpu/nova-core/vbios.rs:511:17
|
511 | / u32::from(data[29]) << 24
512 | | | u32::from(data[28]) << 16
| |_______________________________________________^ help: consider parenthesizing your expression: `(u32::from(data[29]) << 24) | (u32::from(data[28]) << 16)`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedenceWhile so far we try our best to keep all versions Clippy-clean, the minimum (which is now Rust 1.85.0 after the bump) and the latest stable are the most important ones; and this may be considered "false positives" with respect to the behavior in other versions.
Thus allow this lint for this version using the per-version flags mechanism introduced in the previous commit.
--- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Makefile +2 -1
@@ -836,7 +836,8 @@ export WARN_ON_UNUSED_TRACEPOINTS # Per-version Rust flags. These are like `rust_common_flags`, but may # depend on the Rust compiler version (e.g. using `rustc-min-version`). -rust_common_flags_per_version := +rust_common_flags_per_version := \ + $(if $(call rustc-min-version,108600),,-Aclippy::precedence) rust_common_flags += $(rust_common_flags_per_version) KBUILD_HOSTRUSTFLAGS += $(rust_common_flags_per_version)
Signature · 1 line
2.53.0
Re: [PATCH 33/33] rust: kbuild: allow `clippy::precedence` for Rust < 1.86.0
Quoted 54 lines · Miguel Ojeda
The Clippy
precedencelint was extended in Rust 1.85.0 to include bitmasking and shift operations [1]. However, because it generated many hits, in Rust 1.86.0 it was split into a newprecedence_bitslint which is not enabled by default [2].In other words, only Rust 1.85 has a different behavior. For instance, it reports:
warning: operator precedence can trip the unwary --> drivers/gpu/nova-core/fb/hal/ga100.rs:16:5 | 16 | / u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::read(bar).adr_39_08()) << FLUSH_SYSMEM_ADDR_SHIFT 17 | | | u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI::read(bar).adr_63_40()) 18 | | << FLUSH_SYSMEM_ADDR_SHIFT_HI | |_________________________________________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence = note: `-W clippy::precedence` implied by `-W clippy::all` = help: to override `-W clippy::all` add `#[allow(clippy::precedence)]` help: consider parenthesizing your expression | 16 ~ (u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::read(bar).adr_39_08()) << FLUSH_SYSMEM_ADDR_SHIFT) | (u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI::read(bar).adr_63_40()) 17 + << FLUSH_SYSMEM_ADDR_SHIFT_HI) | warning: operator precedence can trip the unwary --> drivers/gpu/nova-core/vbios.rs:511:17 | 511 | / u32::from(data[29]) << 24 512 | | | u32::from(data[28]) << 16 513 | | | u32::from(data[27]) << 8 | |______________________________________________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence help: consider parenthesizing your expression | 511 ~ u32::from(data[29]) << 24 512 + | u32::from(data[28]) << 16 | (u32::from(data[27]) << 8) | warning: operator precedence can trip the unwary --> drivers/gpu/nova-core/vbios.rs:511:17 | 511 | / u32::from(data[29]) << 24 512 | | | u32::from(data[28]) << 16 | |_______________________________________________^ help: consider parenthesizing your expression: `(u32::from(data[29]) << 24) | (u32::from(data[28]) << 16)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedenceWhile so far we try our best to keep all versions Clippy-clean, the minimum (which is now Rust 1.85.0 after the bump) and the latest stable are the most important ones; and this may be considered "false positives" with respect to the behavior in other versions.
Quoted 6 lines
Thus allow this lint for this version using the per-version flags mechanism introduced in the previous commit.
Quoted 3 lines
--- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Re: [PATCH 33/33] rust: kbuild: allow `clippy::precedence` for Rust < 1.86.0
In reply to Miguel OjedaQuoted 4 lines · Miguel Ojeda
The Clippy
precedencelint was extended in Rust 1.85.0 to include bitmasking and shift operations [1]. However, because it generated many hits, in Rust 1.86.0 it was split into a newprecedence_bitslint which is not enabled by default [2].
Might be good to retain some of this in a code comment.
Signature · 1 line
Tamir Duberstein <[email protected]>
Re: [PATCH 33/33] rust: kbuild: allow `clippy::precedence` for Rust < 1.86.0
Quoted 2 lines · Tamir Duberstein
Might be good to retain some of this in a code comment.
Bah, I missed this note among the rest, sorry (I didn't reply to the ones where the commit went away due to the changes in v2) -- I agree it wouldn't hurt to remember why it is there, even if it is already in the Git log.
I will probably add it for tomorrow, especially if I have to rebase.
Thanks!
Cheers,
Miguel