From: Miguel Ojeda <ojeda@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] Rust for v6.20 / v7.0
Date: Sun, 8 Feb 2026 14:54:43 +0100 [thread overview]
Message-ID: <20260208135445.64840-1-ojeda@kernel.org> (raw)
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
next reply other threads:[~2026-02-08 13:55 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-08 13:54 Miguel Ojeda [this message]
2026-02-10 19:59 ` [GIT PULL] Rust for v6.20 / v7.0 pr-tracker-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260208135445.64840-1-ojeda@kernel.org \
--to=ojeda@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.