Skip to content

rust: bump minimum Rust and `bindgen` versions

Miguel Ojeda dri-devel linux-arm-kernel linux-block linux-doc linux-kbuild linux-kselftest linux-riscv lkml llvm nouveau rust-for-linux 2 versions – Applied

Status from this message: Applied series to `rust-next` -- thanks everyone!

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest33 patches 20 repliesApplied 33/33
  2. v133 patches 84 repliesSuperseded

Changes in v2 from the cover letter

- Added patch to globally allow incompatible_msrv and removed the last instance.

- Replaced --remap-path-prefix patches with one that drops the workaround entirely (and place it as the first one) and summarizes the discussion.

Patches in v2 All 33 applied

#Subject and filesSizeRepliesApplied
1/33rust: kbuild: remove `--remap-path-prefix` workaroundsrust/Makefile+2 -63 repliesApplied
2/33rust: kbuild: remove "`try` keyword" workaround for `bindgen` < 0.59.2rust/bindgen_parameters+0 -40 repliesApplied
3/33rust: kbuild: remove unneeded old `allow`s for generated layout testsrust/bindings/lib.rs rust/uapi/lib.rs+0 -80 repliesApplied
4/33gpu: nova-core: bindings: remove unneeded `cfg_attr`drivers/gpu/nova-core/gsp/fw/r570_144.rs+0 -30 repliesApplied
5/33rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)Documentation/process/changes.rst scripts/min-tool-version.sh+2 -20 repliesApplied
6/33rust: bump Clippy's MSRV and clean `incompatible_msrv` allows.clippy.toml drivers/gpu/nova-core/gsp/cmdq.rs rust/kernel/ptr.rs +1 more+2 -90 repliesApplied
7/33rust: allow globally `clippy::incompatible_msrv`Makefile rust/macros/helpers.rs+1 -16 repliesApplied
8/33rust: simplify `RUSTC_VERSION` Kconfig conditionsarch/Kconfig arch/arm64/Kconfig arch/riscv/Kconfig +1 more+1 -150 repliesApplied
9/33rust: remove `RUSTC_HAS_SLICE_AS_FLATTENED` and simplify codeinit/Kconfig rust/kernel/lib.rs rust/kernel/prelude.rs +1 more+0 -560 repliesApplied
10/33rust: remove `RUSTC_HAS_COERCE_POINTEE` and simplify codeinit/Kconfig rust/kernel/alloc/kbox.rs rust/kernel/lib.rs +2 more+6 -770 repliesApplied
11/33rust: kbuild: remove skipping of `-Wrustdoc::unescaped_backticks`rust/Makefile+1 -40 repliesApplied
12/33rust: kbuild: remove `feature(...)`s that are now stablerust/Makefile rust/kernel/lib.rs scripts/Makefile.build+1 -280 repliesApplied
13/33rust: transmute: simplify code with Rust 1.80.0 `split_at_*checked()`rust/kernel/transmute.rs+6 -270 repliesApplied
14/33rust: alloc: simplify with `NonNull::add()` now that it is stablerust/kernel/alloc/allocator/iter.rs+1 -70 repliesApplied
15/33rust: macros: simplify code using `feature(extract_if)`rust/macros/kunit.rs rust/macros/lib.rs+8 -41 replyApplied
16/33rust: block: update `const_refs_to_static` MSRV TODO commentrust/kernel/block/mq/gen_disk.rs+1 -30 repliesApplied
17/33rust: bump `bindgen` minimum supported version to 0.71.1 (Debian Trixie)Documentation/process/changes.rst scripts/min-tool-version.sh+2 -20 repliesApplied
18/33rust: rust_is_available: remove warning for `bindgen` 0.66.[01]scripts/rust_is_available.sh scripts/rust_is_available_bindgen_0_66.h scripts/rust_is_available_test.py+3 -380 repliesApplied
19/33rust: rust_is_available: remove warning for `bindgen` < 0.69.5 && libclang >= 19.1scripts/rust_is_available.sh scripts/rust_is_available_bindgen_libclang_concat.h scripts/rust_is_available_test.py+1 -510 repliesApplied
20/33rust: kbuild: update `bindgen --rust-target` version and replace commentrust/Makefile+2 -140 repliesApplied
21/33rust: kbuild: remove "dummy parameter" workaround for `bindgen` < 0.71.1init/Kconfig scripts/rust_is_available.sh+2 -130 repliesApplied
22/33docs: rust: quick-start: openSUSE provides `rust-src` package nowadaysDocumentation/rust/quick-start.rst+1 -10 repliesApplied
23/33docs: rust: quick-start: update Ubuntu versioned packagesDocumentation/rust/quick-start.rst+14 -140 repliesApplied
24/33docs: rust: quick-start: update minimum Ubuntu versionDocumentation/rust/quick-start.rst+1 -11 replyApplied
25/33docs: rust: quick-start: add Ubuntu 26.04 LTS and remove subsection titleDocumentation/rust/quick-start.rst+1 -41 replyApplied
26/33docs: rust: quick-start: remove Gentoo "testing" noteDocumentation/rust/quick-start.rst+2 -20 repliesApplied
27/33docs: rust: quick-start: remove Nix "unstable channel" noteDocumentation/rust/quick-start.rst+2 -20 repliesApplied
28/33docs: rust: quick-start: remove GDB/Binutils mentionDocumentation/rust/quick-start.rst+0 -90 repliesApplied
29/33docs: rust: general-information: simplify Kconfig exampleDocumentation/rust/general-information.rst+1 -10 repliesApplied
30/33docs: rust: general-information: use real exampleDocumentation/rust/general-information.rst+2 -20 repliesApplied
31/33rust: declare cfi_encoding for lru_statusdrivers/android/binder/Makefile drivers/android/binder/page_range.rs drivers/android/binder/page_range_helper.c +5 more+10 -450 repliesApplied
32/33rust: kbuild: support global per-version flagsMakefile+9 -12 repliesApplied
33/33rust: kbuild: allow `clippy::precedence` for Rust < 1.86.0Makefile+2 -11 replyApplied

Reviews trailers per patch

All 33 patches have a Reviewed-by or Acked-by.

PatchTamir DubersteinGary GuoDanilo KrummrichBenno LossinAlice RyhlNicolas Schier
1/33R-b A-b A-b
2/33R-b R-b
3/33R-b R-b
4/33R-b R-b A-b
5/33A-b A-b A-b A-b A-b
6/33R-b R-b A-b
7/33R-b R-b
8/33R-b R-b
9/33R-b R-b
10/33R-b R-b A-b
11/33R-b R-b
12/33R-b R-b
13/33R-b R-b
14/33R-b R-b A-b
15/33R-b
16/33R-b R-b
17/33A-b R-b
18/33R-b
19/33R-b
20/33R-b R-b
21/33R-b R-b
22/33R-b
23/33R-b
24/33R-b R-b
25/33R-b R-b
26/33R-b
27/33R-b R-b
28/33R-b R-b
29/33R-b R-b
30/33R-b R-b
31/33R-b
32/33R-b A-b
33/33R-b R-b A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 6 reviewers.

Read the v2 thread

Cover letter [PATCH v2 00/33] 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:

- A few cleanups that can be performed before the bumps.
- The Rust bump (and its cleanups).
- The bindgen bump (and its cleanups).
- Documentation updates.
- The cfi_encoding patch, added here, which needs the bump.
- The per-version flags support and a Clippy cleanup on top.

---
v1: https://lore.kernel.org/rust-for-linux/[email protected]/
v2:
- Added patch to globally allow incompatible_msrv and removed the last instance.

- Replaced --remap-path-prefix patches with one that drops the workaround entirely (and place it as the first one) and summarizes the discussion.

I also noticed that --remap-path-prefix for rustdoc is still unstable (unlike rustc's one), so I added it to our list as usual
(https://github.com/Rust-for-Linux/linux/issues/2). There does not seem to be a tracking issue, so I asked upstream about it.

We will need these two lines as the resolution for the conflict:

$(RUSTDOC) $(filter-out $(skip_flags) --remap-path-scope=%,$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \

$(RUSTDOC) --test $(filter-out --remap-path-scope=%,$(rust_flags)) \

- Reworked the extract_if patch to use it (unstably). The feature last major change happened in Rust 1.85.0, so that is fine.

- Moved $(HOSTRUSTFLAGS) below so that per-version flags (like lints) can be overridden too. Please see the details in the commit and my reply to v1.

- Added feature(extract_if) and feature(non_null_convenience) items to https://github.com/Rust-for-Linux/linux/issues/1223.

Then reworded the commits accordingly to include the references to tracking issues and PRs.

- Other rewords, e.g. the "beyond" typo.

- Rebased on top of rust-next.

- Picked up tags.

Alice Ryhl (1):
rust: declare cfi_encoding for lru_status

Miguel Ojeda (32):
rust: kbuild: remove --remap-path-prefix workarounds
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
rust: bump Rust minimum supported version to 1.85.0 (Debian Trixie)
rust: bump Clippy's MSRV and clean incompatible_msrv allows
rust: allow globally clippy::incompatible_msrv
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: transmute: simplify code with Rust 1.80.0 split_at_*checked()
rust: alloc: simplify with NonNull::add() now that it is stable
rust: macros: simplify code using feature(extract_if)
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 bindgen 0.66.[01]
rust: rust_is_available: remove warning for bindgen < 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

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                                      | 12 +++-
 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                                 | 31 ++--------
 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/helpers.rs                        |  1 -
 rust/macros/kunit.rs                          |  9 +--
 rust/macros/lib.rs                            |  3 +
 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 +------------------
 39 files changed, 83 insertions(+), 451 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

base-commit: 36f5a2b09e650b82d7b2a106e3b93af48c2010d9 --
2.53.0