public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] Rust for v7.1
@ 2026-04-10 20:04 Miguel Ojeda
  0 siblings, 0 replies; only message in thread
From: Miguel Ojeda @ 2026-04-10 20:04 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux, linux-kernel

Hi Linus,

This is the next round of the Rust support.

The biggest "user facing" change is the bump of the minimum Rust version
to follow Debian Stable as we discussed in the Maintainers Summit and
LPC etc.

This carries the two back merges that we discussed -- I have both at the
top of the PR, in case I did something wrong and so that they were
easy to spot. I also merged first the one with the newest base, so that
the second one was obvious. I explained what happened in the merge
commit and used the "temporary merge first" to get the right diffstat
and merge log.

I also talked to my submaintainers so that they know they should avoid
back merges in general. By the way, Tamir has sent me his first PR for
rust-analyzer this cycle, which is included here.

No conflicts expected at this time, but linux-next should generally have
the right resolutions. "Thanks" to the back merge, one of the
conceptually (not mechanically) tricky ones is already solved [1].

All commits have been in linux-next for 3 rounds or more.

Please pull for v7.1 -- thanks!

Link: https://lore.kernel.org/linux-next/CANiq72kdxB=W3_CV1U44oOK3SssztPo2wLDZt6LP94TEO+Kj4g@mail.gmail.com/ [1]

Cheers,
Miguel

The following changes since commit c369299895a591d96745d6492d4888259b004a9e:

  Linux 7.0-rc5 (2026-03-22 14:42:17 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux.git tags/rust-7.1

for you to fetch changes up to 8a23051ed8584215b22368e9501f771ef98f0c1d:

  Merge tag 'pin-init-v7.1' of https://github.com/Rust-for-Linux/linux into rust-next (2026-04-08 10:44:46 +0200)

----------------------------------------------------------------
Rust changes for v7.1

Toolchain and infrastructure:

 - Bump the minimum Rust version to 1.85.0 (and 'bindgen' to 0.71.1).

   As proposed in LPC 2025 and the Maintainers Summit [1], we are going
   to follow Debian Stable's Rust versions as our minimum versions.

   Debian Trixie was released on 2025-08-09 with a Rust 1.85.0 and
   'bindgen' 0.71.1 toolchain, which is a fair amount of time for e.g.
   kernel developers to upgrade.

   Other major distributions support a Rust version that is high enough
   as well, including:

     + Arch Linux.
     + Fedora Linux.
     + Gentoo Linux.
     + Nix.
     + openSUSE Slowroll and openSUSE Tumbleweed.
     + Ubuntu 25.10 and 26.04 LTS. In addition, 24.04 LTS using
       their versioned packages.

   The merged patch series comes with the associated cleanups and
   simplifications treewide that can be performed thanks to both bumps,
   as well as documentation updates.

   In addition, start using 'bindgen''s '--with-attribute-custom-enum'
   feature to set the 'cfi_encoding' attribute for the 'lru_status' enum
   used in Binder.

   Link: https://lwn.net/Articles/1050174/ [1]

 - Add experimental Kconfig option ('CONFIG_RUST_INLINE_HELPERS') that
   inlines C helpers into Rust.

   Essentially, it performs a step similar to LTO, but just for the
   helpers, i.e. very local and fast.

   It relies on 'llvm-link' and its '--internalize' flag, and requires
   a compatible LLVM between Clang and 'rustc' (i.e. same major version,
   'CONFIG_RUSTC_CLANG_LLVM_COMPATIBLE'). It is only enabled for two
   architectures for now.

   The result is a measurable speedup in different workloads that
   different users have tested. For instance, for the null block driver,
   it amounts to a 2%.

 - Support global per-version flags.

   While we already have per-version flags in many places, we didn't
   have a place to set global ones that depend on the compiler version,
   i.e. in 'rust_common_flags', which sometimes is needed to e.g. tweak
   the lints set per version.

   Use that to allow the 'clippy::precedence' lint for Rust < 1.86.0,
   since it had a change in behavior.

 - Support overriding the crate name and apply it to Rust Binder, which
   wanted the module to be called 'rust_binder'.

 - Add the remaining '__rust_helper' annotations (started in the
   previous cycle).

'kernel' crate:

 - Introduce the 'const_assert!' macro: a more powerful version of
   'static_assert!' that can refer to generics inside functions or
   implementation bodies, e.g.:

       fn f<const N: usize>() {
           const_assert!(N > 1);
       }

       fn g<T>() {
           const_assert!(size_of::<T>() > 0, "T cannot be ZST");
       }

   In addition, reorganize our set of build-time assertion macros
   ('{build,const,static_assert}!') to live in the 'build_assert'
   module.

   Finally, improve the docs as well to clarify how these are different
   from one another and how to pick the right one to use, and their
   equivalence (if any) to the existing C ones for extra clarity.

 - 'sizes' module: add 'SizeConstants' trait.

   This gives us typed 'SZ_*' constants (avoiding casts) for use in
   device address spaces where the address width depends on the hardware
   (e.g. 32-bit MMIO windows, 64-bit GPU framebuffers, etc.), e.g.:

       let gpu_heap = 14 * u64::SZ_1M;
       let mmio_window = u32::SZ_16M;

 - 'clk' module: implement 'Send' and 'Sync' for 'Clk' and thus simplify
   the users in Tyr and PWM.

 - 'ptr' module: add 'const_align_up'.

 - 'str' module: improve the documentation of the 'c_str!' macro to
   explain that one should only use it for non-literal cases (for the
   other case we instead use C string literals, e.g. 'c"abc"').

 - Disallow the use of 'CStr::{as_ptr,from_ptr}' and clean one such use
   in the 'task' module.

 - 'sync' module: finish the move of 'ARef' and 'AlwaysRefCounted'
   outside of the 'types' module, i.e. update the last remaining
   instances and finally remove the re-exports.

 - 'error' module: clarify that 'from_err_ptr' can return 'Ok(NULL)',
   including runtime-tested examples.

   The intention is to hopefully prevent UB that assumes the result of
   the function is not 'NULL' if successful. This originated from a case
   of UB I noticed in 'regulator' that created a 'NonNull' on it.

Timekeeping:

 - Expand the example section in the 'HrTimer' documentation.

 - Mark the 'ClockSource' trait as unsafe to ensure valid values for
   'ktime_get()'.

 - Add 'Delta::from_nanos()'.

'pin-init' crate:

 - Replace the 'Zeroable' impls for 'Option<NonZero*>' with impls of
   'ZeroableOption' for 'NonZero*'.

 - Improve feature gate handling for unstable features.

 - Declutter the documentation of implementations of 'Zeroable' for
   tuples.

 - Replace uses of 'addr_of[_mut]!' with '&raw [mut]'.

rust-analyzer:

 - Add type annotations to 'generate_rust_analyzer.py'.

 - Add support for scripts written in Rust ('generate_rust_target.rs',
   'rustdoc_test_builder.rs', 'rustdoc_test_gen.rs').

 - Refactor 'generate_rust_analyzer.py' to explicitly identify host and
   target crates, improve readability, and reduce duplication.

And some other fixes, cleanups and improvements.

----------------------------------------------------------------
Alice Ryhl (8):
      rust: clk: add __rust_helper to helpers
      rust: jump_label: add __rust_helper to helpers
      rust: clk: implement Send and Sync
      tyr: remove impl Send/Sync for TyrData
      pwm: th1520: remove impl Send/Sync for Th1520PwmDriverData
      rust: support overriding crate_name
      rust_binder: override crate name to rust_binder
      rust: declare cfi_encoding for lru_status

Alistair Francis (1):
      rust: kernel: mark as `#[inline]` all `From::from()`s for `Error`

Andreas Hindborg (1):
      hrtimer: add usage examples to documentation

Antonio Hickey (1):
      rust: pin-init: replace `addr_of_mut!` with `&raw mut`

Benno Lossin (1):
      rust: pin-init: properly document let binding workaround

Eliot Courtney (1):
      scripts: generate_rust_analyzer.py: rename cfg to generated_cfg

FUJITA Tomonori (1):
      rust: time: make ClockSource unsafe trait

Gary Guo (11):
      rust: task: use `as_char_ptr` instead of `as_ptr().cast()`
      rust: disallow use of `CStr::as_ptr` and `CStr::from_ptr`
      rust: pin-init: build: simplify use of nightly features
      rust: pin-init: doc: de-clutter documentation with fake-variadics
      rust: list: hide macros from top-level kernel doc
      rust: move `static_assert` into `build_assert`
      rust: add `const_assert!` macro
      rust: rework `build_assert!` documentation
      kbuild: rust: add `CONFIG_RUSTC_CLANG_LLVM_COMPATIBLE`
      rust: helpers: #define __rust_helper
      kbuild: rust: provide an option to inline C helpers into Rust

Hamdan-Khan (1):
      rust: pin-init: implement ZeroableOption for NonZero* integer types

John Hubbard (2):
      rust: ptr: add const_align_up()
      rust: sizes: add SizeConstants trait for device address space constants

Lyude Paul (1):
      rust/time: Add Delta::from_nanos()

Miguel Ojeda (41):
      MAINTAINERS: add `.rustfmt.toml` to "RUST" entry
      Merge tag 'rust-analyzer-v7.1' of https://github.com/Rust-for-Linux/linux into rust-next
      kbuild: rust: allow `clippy::uninlined_format_args`
      rust: macros: simplify `format!` arguments
      rust: prelude: use the "kernel vertical" imports style
      rust: kbuild: remove `--remap-path-prefix` workarounds
      rust: kbuild: remove "`try` keyword" workaround for `bindgen` < 0.59.2
      rust: kbuild: remove unneeded old `allow`s 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
      Merge patch series "rust: bump minimum Rust and `bindgen` versions"
      rust: kernel: update `file_with_nul` comment
      Merge tag 'rust-timekeeping-for-v7.1' of https://github.com/Rust-for-Linux/linux into rust-next
      Merge tag 'pin-init-v7.1' of https://github.com/Rust-for-Linux/linux into rust-next

Mirko Adzic (1):
      rust: error: clarify that `from_err_ptr` can return `Ok(NULL)`

Nakamura Shuta (1):
      rust: str: improve safety comment for CString::try_from_fmt

Shankari Anand (3):
      rust: i2c: Update ARef and AlwaysRefCounted imports to use sync::aref
      rust: usb: Update AlwaysRefCounted imports to use sync::aref
      rust: types: remove temporary re-exports of ARef and AlwaysRefCounted

Tamir Duberstein (8):
      scripts: generate_rust_analyzer.py: extract `{build,register}_crate`
      scripts: generate_rust_analyzer.py: drop `"is_proc_macro": false`
      scripts: generate_rust_analyzer.py: add type hints
      scripts: generate_rust_analyzer.py: identify crates explicitly
      scripts: generate_rust_analyzer.py: define scripts
      scripts: generate_rust_analyzer.py: avoid FD leak
      scripts: generate_rust_analyzer.py: reduce cfg plumbing
      rust: str: update `c_str!` documentation

 .clippy.toml                                       |  12 +-
 .gitignore                                         |   4 +
 Documentation/process/changes.rst                  |   4 +-
 Documentation/rust/general-information.rst         |   4 +-
 Documentation/rust/quick-start.rst                 |  52 ++--
 MAINTAINERS                                        |   1 +
 Makefile                                           |  21 +-
 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/android/binder/rust_binder_main.rs         |   2 +
 drivers/gpu/drm/tyr/driver.rs                      |  12 -
 drivers/gpu/nova-core/gsp/cmdq.rs                  |   6 +-
 drivers/gpu/nova-core/gsp/fw/r570_144.rs           |   3 -
 drivers/pwm/pwm_th1520.rs                          |  15 -
 init/Kconfig                                       |  30 +-
 lib/Kconfig.debug                                  |  17 ++
 rust/Makefile                                      |  69 +++--
 rust/bindgen_parameters                            |   8 +-
 rust/bindings/bindings_helper.h                    |   1 -
 rust/bindings/lib.rs                               |   5 +-
 rust/exports.c                                     |   5 +-
 rust/helpers/clk.c                                 |  24 +-
 rust/helpers/helpers.c                             |  29 ++
 rust/helpers/jump_label.c                          |   2 +-
 rust/kernel/alloc/allocator/iter.rs                |   8 +-
 rust/kernel/alloc/kbox.rs                          |  29 +-
 rust/kernel/alloc/kvec/errors.rs                   |   3 +
 rust/kernel/block/mq/gen_disk.rs                   |   4 +-
 rust/kernel/build_assert.rs                        | 183 +++++++++--
 rust/kernel/clk.rs                                 |   7 +
 rust/kernel/error.rs                               |  37 +++
 rust/kernel/i2c.rs                                 |  13 +-
 rust/kernel/lib.rs                                 |  38 +--
 rust/kernel/list.rs                                |  22 +-
 rust/kernel/list/arc.rs                            |  23 +-
 rust/kernel/list/arc_field.rs                      |   1 +
 rust/kernel/list/impl_list_item_mod.rs             |   3 +
 rust/kernel/num/bounded.rs                         |  24 +-
 rust/kernel/prelude.rs                             | 110 +++++--
 rust/kernel/ptr.rs                                 |  42 ++-
 rust/kernel/sizes.rs                               | 172 ++++++++---
 rust/kernel/slice.rs                               |  49 ---
 rust/kernel/static_assert.rs                       |  39 ---
 rust/kernel/str.rs                                 |  27 +-
 rust/kernel/sync/arc.rs                            |  21 +-
 rust/kernel/task.rs                                |   7 +-
 rust/kernel/time.rs                                |  32 +-
 rust/kernel/time/hrtimer.rs                        | 336 +++++++++++++++++++++
 rust/kernel/transmute.rs                           |  35 +--
 rust/kernel/types.rs                               |   2 -
 rust/kernel/usb.rs                                 |   6 +-
 rust/kernel/xarray.rs                              |   1 +
 rust/macros/helpers.rs                             |   1 -
 rust/macros/kunit.rs                               |   9 +-
 rust/macros/lib.rs                                 |   3 +
 rust/macros/module.rs                              |   9 +-
 rust/pin-init/README.md                            |   3 +-
 rust/pin-init/examples/big_struct_in_place.rs      |   3 +
 rust/pin-init/examples/linked_list.rs              |   3 +-
 rust/pin-init/examples/mutex.rs                    |   3 +-
 rust/pin-init/examples/pthread_mutex.rs            |   3 +-
 rust/pin-init/examples/static_init.rs              |   3 +-
 rust/pin-init/internal/src/init.rs                 |  14 +-
 rust/pin-init/internal/src/lib.rs                  |   2 +-
 rust/pin-init/src/lib.rs                           |  73 +++--
 rust/uapi/lib.rs                                   |   5 +-
 scripts/Makefile.build                             |  15 +-
 scripts/generate_rust_analyzer.py                  | 298 +++++++++++++-----
 scripts/min-tool-version.sh                        |   4 +-
 scripts/rust_is_available.sh                       |  36 +--
 scripts/rust_is_available_bindgen_0_66.h           |   2 -
 .../rust_is_available_bindgen_libclang_concat.h    |   3 -
 scripts/rust_is_available_test.py                  |  58 +---
 78 files changed, 1391 insertions(+), 821 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 rust/kernel/static_assert.rs
 delete mode 100644 scripts/rust_is_available_bindgen_0_66.h
 delete mode 100644 scripts/rust_is_available_bindgen_libclang_concat.h

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-04-10 20:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-10 20:04 [GIT PULL] Rust for v7.1 Miguel Ojeda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox