* [GIT PULL] Rust for v7.3
@ 2026-08-16 19:19 Miguel Ojeda
0 siblings, 0 replies; only message in thread
From: Miguel Ojeda @ 2026-08-16 19:19 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, Daniel Almeida, Tamir Duberstein,
Alexandre Courbot, Onur Özkan, rust-for-linux, linux-kernel
Hi Linus,
This is the next round of the Rust support.
This one is back to a normal size again. It has a bunch of fixes that I
was on the fence about submitting as one more fixes PR last cycle. It
also contains the first fixes for eventually using Rust's GCC backend
(`rustc_codegen_gcc`), which I sent on behalf of its lead, Antoni.
All commits have been in linux-next for 2 rounds or more.
There will be the following semantic conflicts with other trees --
linux-next should generally have the right resolutions:
- driver-core: https://lore.kernel.org/linux-next/20260807074729.108159-1-ojeda@kernel.org/
- char-misc: https://lore.kernel.org/linux-next/20260813163951.1102583-1-gary@kernel.org/
- slab/char-misc: https://lore.kernel.org/linux-next/20260805-slab-rust-fix-v1-1-c4d4c1b69de2@kernel.org/
There will also be a couple of straightforward, normal conflicts with:
- tip: https://lore.kernel.org/linux-next/anoDGk0XqfBjHfUn@sirena.org.uk/
- char-misc: https://lore.kernel.org/linux-next/CANiq72kXRevcVMWZnJZQ_PTK_iRO4z6iA30xvv6mR1VEdy96ZA@mail.gmail.com/
(the diff in that thread is from another conflict somehow, but the
actual conflict is very simple anyway)
I also did a test merge with your status from a couple hours ago, and it
looks good, without conflicts at the moment.
I will need to send a PR with ~4 fixes during the merge window. I will
send the build system rework next cycle.
Please pull for v7.3 -- thanks!
Cheers,
Miguel
The following changes since commit 075b74841bd0065a3bda3440873c747938e69b68:
Linux 7.2-rc6 (2026-08-02 16:24:24 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux.git tags/rust-7.3
for you to fetch changes up to 47f27155f17498fccb1f222f79089642337498a9:
rust: add functions and traits for lossless integer conversions (2026-08-13 13:41:28 +0200)
----------------------------------------------------------------
Rust changes for v7.3
Toolchain and infrastructure:
- Warn when using 'bindgen' < 0.72.1 with 'libclang' >= 22, since that
combination may fail to build. It includes a probe for the bug in
case 'bindgen' happens to be patched, and tests.
In parallel, Nathan updated the instructions for the kernel.org
LLVM+Rust toolchains so that the latest version of 'bindgen' is
installed, which should avoid some of these situations.
- Support testing 'rust_is_available.sh' with 'bash' as '/bin/sh'.
- Fix an objtool warning by adding one more 'noreturn' function for
Rust 1.99.0 (expected 2026-10-01).
- Fix build error in the 'rusttest' target due to ambiguity when the
'rustc-dev' component is installed, which was uncovered by the work
to support Rust's GCC backend ('rustc_codegen_gcc').
- Fix future Clang warnings in the upcoming powerpc support due to
macro redefinitions in the UAPI helper header by including the
arch-aware 'ioctl.h' header.
'kernel' crate:
- Rework module ownership support:
- Move the module-related types into a new 'module' module and make
the 'THIS_MODULE' pointer a constant of 'ModuleMetadata' so that
modules can provide the pointer in const contexts, and add a
'this_module' 'const fn' to retrieve it.
This was enabled by upstream Rust's work on the 'const_mut_refs'
and 'const_refs_to_static' features which were stabilized back
in Rust 1.83.0.
- Teach '#[vtable]' to associate implementations with their owning
module, defaulting to the local one, including fallbacks for
doctests, uses within the 'kernel' crate (like upcoming KUnit
'#[test]'s for DRM) and 'rusttest'.
- Set 'fops.owner' from the module pointer for DRM and miscdevice.
- Migrate Rust Binder and configfs away from the old 'THIS_MODULE'
'static' and finally remove it from the 'module!' macro.
- 'num' module:
- Add the new 'casts' module for lossless integer conversions.
Rust's 'core' library's 'From' implementations do not cover
conversions that are not portable or future-proof. However, the
kernel supports a narrower set of architectures, which makes it
helpful to provide more infallible conversions, instead of having
developers use 'as' casts, which carry the risk of silently
losing data.
This goes along with previous work we did to avoid casts in Rust
kernel code since they are more powerful than needed.
Thus, provide safe 'const' conversion functions (e.g.
'usize_as_u64' and 'u64_into_u8'), as well as the 'FromSafeCast'
and 'IntoSafeCast' extension traits that provide conversions that
are known to be lossless in the kernel, and an 'arch' submodule
defining conversions that are known to be lossless on particular
architectures (e.g. 64-bit platforms). For instance:
// Conversion in const context.
const USIZED_CONST: usize = u8_as_usize(255u8);
// Non-const conversions.
let a = u64::from_safe_cast(4096usize);
let b: u64 = 4096usize.into_safe_cast();
- Add 'Bounded::shr_exact' method in the vein of 'try_shrink' which
shifts a bounded right only if it loses no set bits.
- Fix unsoundness issue in the 'Bounded::shr' method by rejecting,
at compile-time, shifts of at least the type's bit width.
- 'fmt' module:
- Route '{:p}' raw pointer formatting through the kernel's hashed
'%p' format to prevent address leaks, including support for width
and padding. Include tests for both 'no_hash_pointers' case and
the default (hashed) one.
- Fix the '{:p}' forwarding implementation, which could print the
address of a temporary stack variable.
- 'time' module:
- Make 'Delta' generic over its time unit, with a default unit of
nanoseconds ('Nsec'), preserving the existing behavior. Then, add
a 'Jiffy' time unit.
- Add the 'Delta::as_millis_ceil()' method.
- Fix 'as_micros_ceil()' rounding near 'i64::MAX', which could
yield a result one microsecond too small.
- 'sync' module:
- Implement 'ForeignOwnable' for 'ARef<T>', allowing C code to own
an 'ARef<T>'.
- Add a safe abstraction for 'rcu_barrier()'.
- 'error' module: add all of the remaining error codes, except the
deprecated compatibility aliases.
- 'bug' module:
- Fix build error on UML in 'warn_on!' for callers from within
the 'kernel' crate.
- Fix future 'dead_code' warning on arm and loongarch64 and under
'CONFIG_BUG=n' in 'warn_on!', which would trigger with the
upcoming SRCU abstractions.
- Fix future build error in 'rusttest' on cross-compilation cases,
which would trigger when 'warn_on!' has callers inside the
'kernel' crate.
- 'bitfield' module: fix build error for the upcoming support for
Rust's GCC backend ('rustc_codegen_gcc') by always inlining a couple
conversions used in tests.
'pin-init' crate:
- User-visible changes:
- Merge the '__pinned_init' and '__init' methods and make 'Init'
a marker trait.
- Introduce public APIs 'raw_init' and 'raw_try_init' to prevent
users from needing to invoke the internal
'__pinned_init'/'__init' methods.
- Emit errors for duplicate '#[pin]' attributes.
- Link 'Zeroable::zeroed' and 'pin_init::zeroed' in documentation.
- Other changes:
- Fix unwind safety issues.
- Clean up lint 'allow' and 'expect's.
- Overhaul '#[cfg]' handling to pave the way for tuple structs and
self-referential structs.
- Mark many functions as '#[inline]' for better codegen with '-C
opt-level=s' ('CC_OPTIMIZE_FOR_SIZE').
'MAINTAINERS':
- Update 'MODULE SUPPORT' to cover the new 'module' module.
And some other fixes, cleanups and improvements.
----------------------------------------------------------------
Alexandre Courbot (1):
rust: add functions and traits for lossless integer conversions
Alvin Sun (11):
rust: doctest: use vertical import style
rust: module: move module types into `module.rs`
rust: module: add `THIS_MODULE` const to `ModuleMetadata` trait
rust: doctest: add LocalModule fallback for #[vtable] ThisModule
rust: macros: auto-insert OwnerModule in #[vtable]
rust: drm: set fops.owner from driver module pointer
rust: miscdevice: set fops.owner from driver module pointer
rust: configfs: use `LocalModule` for `THIS_MODULE`
rust_binder: use `LocalModule` for `THIS_MODULE`
rust: macros: remove `THIS_MODULE` static from `module!`
rust: module: update MAINTAINERS to cover module.rs
Antoni Boucher (2):
rust: kbuild: disambiguate `zerocopy` for `rusttest`
rust: bitfield: always inline test conversions
Danilo Krummrich (2):
rust: types: implement ForeignOwnable for ARef<T>
rust: kernel: add `LocalModule` fallback for `#[vtable]` `impl`s
Eliot Courtney (3):
rust: num: use const_assert! in Bounded
rust: num: reject Bounded::shr overshifts at build time
rust: num: add Bounded::shr_exact
FUJITA Tomonori (7):
rust: bug: prevent dead_code warning from warn_on!'s flags constant
rust: bug: skip arch-specific asm in `testlib` builds
rust: bug: fix warn_on macro build error on UML
rust: time: fix as_micros_ceil() rounding near i64::MAX
rust: time: make Delta generic over its time unit
rust: time: add jiffies time unit for Delta
rust: time: add Delta::as_millis_ceil()
Gary Guo (11):
rust: pin-init: examples: fix incorrect drop
rust: pin-init: remove redundant clippy expects in doc tests
rust: pin-init: internal: remove `allow` and `expect`s that don't fire
rust: pin-init: internal: generate brace in macro for init code blocks
rust: pin-init: internal: rework how `#[pin_data]` handles cfg
rust: pin-init: examples: use `Wrapper::pin_init` instead of manual reimplementation
rust: pin-init: merge `__pinned_init` and `__init`
rust: pin-init: add `raw_init` and `raw_try_init` and recommend over `__init`
rust: treewide: replace `__pinned_init` with `raw_[try_]init`
rust: pin-init: remove `__pinned_init` method for `cfg(kernel)`
rust: pin-init: add `#[inline]` to small functions
Harish C S (1):
rust: sync: improve `Arc` documentation links
Ke Sun (2):
rust: fmt: fix {:p} printing stack addresses
rust: fmt: route {:p} through HashedPtr to prevent address leaks
Kosumi Chan (1):
rust: impl_flags: use bit helper in example
Luiz Georg (1):
rust: pin-init: internal: error on duplicate `#[pin]` attribute
Miguel Ojeda (5):
objtool/rust: add one more `noreturn` Rust function for Rust 1.99.0
rust: rust_is_available: support testing with `bash` as `/bin/sh`
rust: rust_is_available: warn for `bindgen` < 0.72.1 && libclang >= 22
Merge tag 'pin-init-v7.3' of https://github.com/Rust-for-Linux/linux into rust-next
docs: rust: quick-start: remove Ubuntu 25.10
Mirko Adzic (2):
rust: pin-init: make `[pin_]init_array_from_fn` unwind safe
rust: pin-init: make `[pin_]chain` unwind safe
Mukesh Kumar Chaurasiya (IBM) (1):
rust: uapi: replace direct asm-generic/ioctl.h include with linux/ioctl.h
Nicolás Antinori (2):
rust: pin-init: docs: link `Zeroable::zeroed` and `pin_init::zeroed` in documentation
rust: pin-init: mark `pin_init::zeroed` and `Zeroable::zeroed` as `#[inline]`
Philipp Stanner (1):
rust: sync: Add abstraction for rcu_barrier()
Timur Tabi (1):
rust: error: add remaining error codes
Younes Akhouayri (1):
rust: print: fix broken `_printk` Rustdoc link
Documentation/rust/quick-start.rst | 2 +-
MAINTAINERS | 2 +-
drivers/android/binder/rust_binder_main.rs | 3 +-
drivers/block/rnull/configfs.rs | 2 +-
drivers/gpu/nova-core/gsp/cmdq.rs | 4 +-
rust/Makefile | 2 +-
rust/kernel/alloc/kbox.rs | 8 +-
rust/kernel/auxiliary.rs | 2 +-
rust/kernel/bitfield.rs | 2 +
rust/kernel/bug.rs | 34 ++-
rust/kernel/configfs.rs | 9 +-
rust/kernel/dma.rs | 10 +-
rust/kernel/drm/device.rs | 5 +-
rust/kernel/drm/gem/mod.rs | 4 +-
rust/kernel/drm/gpuvm/va.rs | 2 +-
rust/kernel/drm/gpuvm/vm_bo.rs | 2 +-
rust/kernel/error.rs | 102 ++++++++
rust/kernel/fmt.rs | 195 +++++++++++++-
rust/kernel/i2c.rs | 2 +-
rust/kernel/impl_flags.rs | 11 +-
rust/kernel/init.rs | 6 +-
rust/kernel/lib.rs | 81 ++----
rust/kernel/miscdevice.rs | 4 +-
rust/kernel/module.rs | 80 ++++++
rust/kernel/net/phy.rs | 6 +-
rust/kernel/num.rs | 2 +
rust/kernel/num/bounded.rs | 36 ++-
rust/kernel/num/casts.rs | 298 +++++++++++++++++++++
rust/kernel/pci.rs | 2 +-
rust/kernel/platform.rs | 2 +-
rust/kernel/print.rs | 2 +-
rust/kernel/pwm.rs | 2 +-
rust/kernel/sync/arc.rs | 20 +-
rust/kernel/sync/aref.rs | 50 ++++
rust/kernel/sync/rcu.rs | 20 ++
rust/kernel/time.rs | 141 +++++++---
rust/kernel/types.rs | 8 +-
rust/kernel/usb.rs | 2 +-
rust/macros/lib.rs | 18 ++
rust/macros/module.rs | 36 +--
rust/macros/vtable.rs | 41 ++-
rust/pin-init/examples/mutex.rs | 11 +-
rust/pin-init/examples/static_init.rs | 10 +-
rust/pin-init/internal/src/init.rs | 8 +-
rust/pin-init/internal/src/pin_data.rs | 94 +++++--
rust/pin-init/src/__internal.rs | 13 +-
rust/pin-init/src/alloc.rs | 10 +-
rust/pin-init/src/lib.rs | 333 ++++++++++++++----------
rust/uapi/uapi_helper.h | 2 +-
scripts/rust_is_available.sh | 14 +
scripts/rust_is_available_bindgen_libclang_22.h | 5 +
scripts/rust_is_available_test.py | 46 +++-
scripts/rustdoc_test_gen.rs | 29 ++-
tools/objtool/check.c | 1 +
54 files changed, 1460 insertions(+), 376 deletions(-)
create mode 100644 rust/kernel/module.rs
create mode 100644 rust/kernel/num/casts.rs
create mode 100644 scripts/rust_is_available_bindgen_libclang_22.h
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-16 19:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-16 19:19 [GIT PULL] Rust for v7.3 Miguel Ojeda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®