[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20260208135445.64840-1-ojeda@kernel.org>
Date: Sun, 8 Feb 2026 14:54:43 +0100
From: Miguel Ojeda <ojeda@...nel.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Miguel Ojeda <ojeda@...nel.org>,
Boqun Feng <boqun.feng@...il.com>,
Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <lossin@...nel.org>,
Andreas Hindborg <a.hindborg@...nel.org>,
Alice Ryhl <aliceryhl@...gle.com>,
Trevor Gross <tmgross@...ch.edu>,
Danilo Krummrich <dakr@...nel.org>,
rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [GIT PULL] Rust for v6.20 / v7.0
Hi Linus,
This is the next round of the Rust support.
A medium-sized one this time. The major changes are the rewrite of our
procedural macros to use the `syn` parsing library which we introduced
last cycle.
Only a single one-liner conflict expected at this time (please pick the
longer line). The resolutions in linux-next should be fine. I did a test
merge with what you have at the moment.
All commits have been in linux-next for a week or more.
Please pull for v6.20 / v7.0 -- thanks!
Cheers,
Miguel
The following changes since commit 24d479d26b25bce5faea3ddd9fa8f3a6c3129ea7:
Linux 6.19-rc6 (2026-01-18 15:42:45 -0800)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux.git tags/rust-6.20-7.0
for you to fetch changes up to b8d687c7eeb52d0353ac27c4f71594a2e6aa365f:
rust: safety: introduce `unsafe_precondition_assert!` macro (2026-02-02 08:10:48 +0100)
----------------------------------------------------------------
Rust changes for v6.20 / v7.0
Toolchain and infrastructure:
- Add '__rust_helper' annotation to the C helpers.
This is needed to inline these helpers into Rust code.
- Remove imports available via the prelude, treewide.
This was possible thanks to a new lint in Klint that Gary has
implemented -- more Klint-related changes, including initial upstream
support, are coming.
- Deduplicate pin-init flags.
'kernel' crate:
- Add support for calling a function exactly once with the new
'do_once_lite!' macro (and 'OnceLite' type).
Based on this, add 'pr_*_once!' macros to print only once.
- Add 'impl_flags!' macro for defining common bitflags operations:
impl_flags!(
/// Represents multiple permissions.
#[derive(Debug, Clone, Default, Copy, PartialEq, Eq)]
pub struct Permissions(u32);
/// Represents a single permission.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Permission {
/// Read permission.
Read = 1 << 0,
/// Write permission.
Write = 1 << 1,
/// Execute permission.
Execute = 1 << 2,
}
);
let mut f: Permissions = Permission::Read | Permission::Write;
assert!(f.contains(Permission::Read));
assert!(!f.contains(Permission::Execute));
f |= Permission::Execute;
assert!(f.contains(Permission::Execute));
let f2: Permissions = Permission::Write | Permission::Execute;
assert!((f ^ f2).contains(Permission::Read));
assert!(!(f ^ f2).contains(Permission::Write));
- 'bug' module: support 'CONFIG_DEBUG_BUGVERBOSE_DETAILED' in the
'warn_on!' macro in order to show the evaluated condition alongside
the file path:
------------[ cut here ]------------
WARNING: [val == 1] linux/samples/rust/rust_minimal.rs:27 at ...
Modules linked in: rust_minimal(+)
- Add safety module with 'unsafe_precondition_assert!' macro, currently
a wrapper for 'debug_assert!', intended to mark the validation of
safety preconditions where possible:
/// # Safety
///
/// The caller must ensure that `index` is less than `N`.
unsafe fn set_unchecked(&mut self, index: usize, value: T) {
unsafe_precondition_assert!(
index < N,
"set_unchecked() requires index ({index}) < N ({N})"
);
...
}
- Add instructions to 'build_assert!' documentation requesting to
always inline functions when used with function arguments.
- 'ptr' module: replace 'build_assert!' with a 'const' one.
- 'rbtree' module: reduce unsafe blocks on pointer derefs.
- 'transmute' module: implement 'FromBytes' and 'AsBytes' for
inhabited ZSTs, and use it in Nova.
- More treewide replacements of 'c_str!' with C string literals.
'macros' crate:
- Rewrite most procedural macros ('module!', 'concat_idents!',
'#[export]', '#[vtable]', '#[kunit_tests]') to use the 'syn' parsing
library which we introduced last cycle, with better diagnostics.
This also allows to support '#[cfg]' properly in the '#[vtable]'
macro, to support arbitrary types in 'module!' macro (not just an
identifier) and to remove several custom parsing helpers we had.
- Use 'quote!' from the recently vendored 'quote' library and remove
our custom one.
The vendored one also allows us to avoid quoting '"' and '{}' inside
the template anymore and editors can now highlight it. In addition,
it improves robustness as it eliminates the need for string quoting
and escaping.
- Use 'pin_init::zeroed()' to simplify KUnit code.
'pin-init' crate:
- Rewrite all procedural macros ('[pin_]init!', '#[pin_data]',
'#[pinned_drop]', 'derive([Maybe]Zeroable)') to use the 'syn' parsing
library which we introduced last cycle, with better diagnostics.
- Implement 'InPlaceWrite' for '&'static mut MaybeUninit<T>'. This
enables users to use external allocation mechanisms such as
'static_cell'.
- Support tuple structs in 'derive([Maybe]Zeroable)'.
- Support attributes on fields in '[pin_]init!' (such as
'#[cfg(...)]').
- Add a '#[default_error(<type>)]' attribute to '[pin_]init!' to
override the default error (when no '? Error' is specified).
- Support packed structs in '[pin_]init!' with
'#[disable_initialized_field_access]'.
- Remove 'try_[pin_]init!' in favor of merging their feature
with '[pin_]init!'. Update the kernel's own 'try_[pin_]init!'
macros to use the 'default_error' attribute.
- Correct 'T: Sized' bounds to 'T: ?Sized' in the generated
'PinnedDrop' check by '#[pin_data]'.
Documentation:
- Conclude the Rust experiment.
MAINTAINERS:
- Add "RUST [RUST-ANALYZER]" entry for the rust-analyzer support. Tamir
and Jesung will take care of it. They have both been active around it
for a while. The new tree will flow through the Rust one.
- Add Gary as maintainer for "RUST [PIN-INIT]".
- Update Boqun and Tamir emails to their kernel.org accounts.
And a few other cleanups and improvements.
----------------------------------------------------------------
Alexandre Courbot (4):
rust: build_assert: add instructions for use with function arguments
rust: ptr: replace unneeded use of `build_assert`
rust: transmute: implement FromBytes and AsBytes for inhabited ZSTs
gpu: nova-core: gsp: use () as message type for GspInitDone message
Alice Ryhl (10):
rust: xarray: add __rust_helper to helpers
rust: bug: add __rust_helper to helpers
rust: err: add __rust_helper to helpers
rust: maple_tree: add __rust_helper to helpers
rust: mm: add __rust_helper to helpers
rust: of: add __rust_helper to helpers
rust: rbtree: add __rust_helper to helpers
rust: slab: add __rust_helper to helpers
rust: uaccess: add __rust_helper to helpers
rust: workqueue: add __rust_helper to helpers
Benno Lossin (15):
rust: pin-init: remove `try_` versions of the initializer macros
rust: pin-init: allow the crate to refer to itself as `pin-init` in doc tests
rust: pin-init: add `syn` dependency and remove `proc-macro[2]` and `quote` workarounds
rust: pin-init: internal: add utility API for syn error handling
rust: pin-init: rewrite `derive(Zeroable)` and `derive(MaybeZeroable)` using `syn`
rust: pin-init: rewrite the `#[pinned_drop]` attribute macro using `syn`
rust: pin-init: rewrite `#[pin_data]` using `syn`
rust: pin-init: add `?Sized` bounds to traits in `#[pin_data]` macro
rust: pin-init: rewrite the initializer macros using `syn`
rust: pin-init: add `#[default_error(<type>)]` attribute to initializer macros
rust: init: use `#[default_error(err)]` for the initializer macros
rust: pin-init: internal: init: add support for attributes on initializer fields
rust: pin-init: internal: init: add escape hatch for referencing initialized fields
rust: pin-init: internal: init: simplify Zeroable safety check
MAINTAINERS: add Gary Guo to pin-init
Boqun Feng (1):
MAINTAINERS: Update my email address to @kernel.org
FUJITA Tomonori (3):
rust: print: Add support for calling a function exactly once
rust: bug: Support DEBUG_BUGVERBOSE_DETAILED option
rust: print: Add pr_*_once macros
Filipe Xavier (1):
rust: add `impl_flags!` macro for defining common bitflag operations
Gary Guo (13):
samples: rust: remove imports available via prelude
rust: macros: use `quote!` from vendored crate
rust: macros: convert `#[vtable]` macro to use `syn`
rust: macros: use `syn` to parse `module!` macro
rust: macros: use `quote!` for `module!` macro
rust: macros: convert `#[export]` to use `syn`
rust: macros: convert `concat_idents!` to use `syn`
rust: macros: convert `#[kunit_tests]` macro to use `syn`
rust: macros: allow arbitrary types to be used in `module!` macro
rust: macros: rearrange `#[doc(hidden)]` in `module!` macro
rust: kunit: use `pin_init::zeroed` instead of custom null value
rust: macros: support `#[cfg]` properly in `#[vtable]` macro.
gpu: nova-core: remove imports available via prelude
Miguel Ojeda (6):
rust: conclude the Rust experiment
MAINTAINERS: add "RUST [RUST-ANALYZER]" entry
Merge tag 'rust-xarray-for-v6.20-v7.0' of https://github.com/Rust-for-Linux/linux into rust-next
Merge tag 'pin-init-v7.0' of https://github.com/Rust-for-Linux/linux into rust-next
Merge patch series "refactor Rust proc macros with `syn`"
Merge patch series "Add support for print exactly once"
Oleksandr Babak (1):
rust: pin-init: Implement `InPlaceWrite<T>` for `&'static mut MaybeUninit<T>`
Onur Özkan (1):
rust: rbtree: reduce unsafe blocks on pointer derefs
Peter Novak (1):
rust: use consistent backtick formatting for NULL in docs
Ritvik Gupta (1):
rust: safety: introduce `unsafe_precondition_assert!` macro
Tamir Duberstein (6):
rust: i2c: replace `kernel::c_str!` with C-Strings
samples: rust: i2c: replace `kernel::c_str!` with C-Strings
rust: kunit: replace `kernel::c_str!` with C-Strings
MAINTAINERS: mailmap: update Tamir Duberstein's email address
rust: clk: replace `kernel::c_str!` with C-Strings
rust: kbuild: deduplicate pin-init flags
.mailmap | 2 +
Documentation/process/programming-language.rst | 2 +-
Documentation/rust/index.rst | 18 -
MAINTAINERS | 27 +-
drivers/gpu/nova-core/firmware/fwsec.rs | 1 -
drivers/gpu/nova-core/firmware/gsp.rs | 12 +-
drivers/gpu/nova-core/firmware/riscv.rs | 2 -
drivers/gpu/nova-core/gsp/commands.rs | 6 +-
drivers/gpu/nova-core/gsp/sequencer.rs | 8 +-
drivers/gpu/nova-core/sbuffer.rs | 5 +-
rust/Makefile | 41 +-
rust/helpers/bug.c | 4 +-
rust/helpers/build_bug.c | 2 +-
rust/helpers/err.c | 6 +-
rust/helpers/maple_tree.c | 3 +-
rust/helpers/mm.c | 20 +-
rust/helpers/of.c | 2 +-
rust/helpers/page.c | 9 +-
rust/helpers/rbtree.c | 9 +-
rust/helpers/slab.c | 4 +-
rust/helpers/uaccess.c | 10 +-
rust/helpers/vmalloc.c | 2 +-
rust/helpers/workqueue.c | 8 +-
rust/helpers/xarray.c | 10 +-
rust/kernel/bug.rs | 20 +-
rust/kernel/build_assert.rs | 7 +-
rust/kernel/clk.rs | 8 +-
rust/kernel/debugfs/entry.rs | 2 +-
rust/kernel/i2c.rs | 8 +-
rust/kernel/impl_flags.rs | 272 ++++
rust/kernel/init.rs | 40 +-
rust/kernel/kunit.rs | 39 +-
rust/kernel/lib.rs | 3 +
rust/kernel/print.rs | 153 +++
rust/kernel/ptr.rs | 12 +-
rust/kernel/rbtree.rs | 27 +-
rust/kernel/safety.rs | 53 +
rust/kernel/transmute.rs | 8 +
rust/macros/concat_idents.rs | 39 +-
rust/macros/export.rs | 26 +-
rust/macros/fmt.rs | 4 +-
rust/macros/helpers.rs | 131 +-
rust/macros/kunit.rs | 279 ++--
rust/macros/lib.rs | 43 +-
rust/macros/module.rs | 907 +++++++------
rust/macros/paste.rs | 2 +-
rust/macros/quote.rs | 182 ---
rust/macros/vtable.rs | 165 +--
rust/pin-init/README.md | 2 +-
rust/pin-init/examples/linked_list.rs | 19 +-
rust/pin-init/examples/pthread_mutex.rs | 10 +-
rust/pin-init/internal/src/diagnostics.rs | 30 +
rust/pin-init/internal/src/helpers.rs | 152 ---
rust/pin-init/internal/src/init.rs | 548 ++++++++
rust/pin-init/internal/src/lib.rs | 48 +-
rust/pin-init/internal/src/pin_data.rs | 615 +++++++--
rust/pin-init/internal/src/pinned_drop.rs | 88 +-
rust/pin-init/internal/src/zeroable.rs | 157 +--
rust/pin-init/src/lib.rs | 200 +--
rust/pin-init/src/macros.rs | 1677 ------------------------
samples/rust/rust_driver_auxiliary.rs | 1 -
samples/rust/rust_driver_i2c.rs | 7 +-
samples/rust/rust_i2c_client.rs | 7 +-
samples/rust/rust_misc_device.rs | 2 -
samples/rust/rust_print_main.rs | 2 +-
scripts/generate_rust_analyzer.py | 2 +-
scripts/rustdoc_test_gen.rs | 4 +-
67 files changed, 2772 insertions(+), 3442 deletions(-)
create mode 100644 rust/kernel/impl_flags.rs
create mode 100644 rust/kernel/safety.rs
delete mode 100644 rust/macros/quote.rs
create mode 100644 rust/pin-init/internal/src/diagnostics.rs
delete mode 100644 rust/pin-init/internal/src/helpers.rs
create mode 100644 rust/pin-init/internal/src/init.rs
delete mode 100644 rust/pin-init/src/macros.rs
Powered by blists - more mailing lists