[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250119224352.365202-1-ojeda@kernel.org>
Date: Sun, 19 Jan 2025 23:43:52 +0100
From: Miguel Ojeda <ojeda@...nel.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Miguel Ojeda <ojeda@...nel.org>,
Alex Gaynor <alex.gaynor@...il.com>,
Boqun Feng <boqun.feng@...il.com>,
Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <benno.lossin@...ton.me>,
Andreas Hindborg <a.hindborg@...nel.org>,
Alice Ryhl <aliceryhl@...gle.com>,
Trevor Gross <tmgross@...ch.edu>,
rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [GIT PULL] Rust for 6.14
Hi Linus,
This is the next round of the Rust support.
I pushed the branch and tag to git.kernel.org this time around as you
asked, but it is also still in GitHub too (like in previous occasions).
I may create a "group" repository in the future.
All commits have been in linux-next for a few rounds.
You may get major Rust changes via a driver-core PR and a Kbuild PR, as
well as smaller ones in a locking PR via tip, a lsm PR and a netdev-next
PR. You already got the blocks PR which contains a small Rust change as
well.
Conflicts expected with both the driver-core and security one. The
conflicts aren't too bad -- the resolutions in -next are fine.
Please pull for v6.14 -- thanks!
Cheers,
Miguel
The following changes since commit 78d4f34e2115b517bcbfe7ec0d018bbbb6f9b0b8:
Linux 6.13-rc3 (2024-12-15 15:58:23 -0800)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux.git tags/rust-6.14
for you to fetch changes up to ceff0757f5dafb5be5205988171809c877b1d3e3:
kbuild: rust: add PROCMACROLDFLAGS (2025-01-15 09:53:54 +0100)
----------------------------------------------------------------
Rust changes for v6.14
Toolchain and infrastructure:
- Finish the move to custom FFI integer types started in the previous
cycle and finally map 'long' to 'isize' and 'char' to 'u8'. Do a few
cleanups on top thanks to that.
- Start to use 'derive(CoercePointee)' on Rust >= 1.84.0.
This is a major milestone on the path to build the kernel using only
stable Rust features. In particular, previously we were using the
unstable features 'coerce_unsized', 'dispatch_from_dyn' and 'unsize',
and now we will use the new 'derive_coerce_pointee' one, which is on
track to stabilization. This new feature is a macro that essentially
expands into code that internally uses the unstable features that we
were using before, without having to expose those.
With it, stable Rust users, including the kernel, will be able to
build custom smart pointers that work with trait objects, e.g.:
fn f(p: &Arc<dyn Display>) {
pr_info!("{p}\n");
}
let a: Arc<dyn Display> = Arc::new(42i32, GFP_KERNEL)?;
let b: Arc<dyn Display> = Arc::new("hello there", GFP_KERNEL)?;
f(&a); // Prints "42".
f(&b); // Prints "hello there".
Together with the 'arbitrary_self_types' feature that we started
using in the previous cycle, using our custom smart pointers like
'Arc' will eventually only rely in stable Rust.
- Introduce 'PROCMACROLDFLAGS' environment variable to allow to link
Rust proc macros using different flags than those used for linking
Rust host programs (e.g. when 'rustc' uses a different C library
than the host programs' one), which Android needs.
- Help kernel builds under macOS with Rust enabled by accomodating
other naming conventions for dynamic libraries (i.e. '.so' vs.
'.dylib') which are used for Rust procedural macros. The actual
support for macOS (i.e. the rest of the pieces needed) is provided
out-of-tree by others, following the policy used for other parts of
the kernel by Kbuild.
- Run Clippy for 'rusttest' code too and clean the bits it spotted.
- Provide Clippy with the minimum supported Rust version to improve
the suggestions it gives.
- Document 'bindgen' 0.71.0 regression.
'kernel' crate:
- 'build_error!': move users of the hidden function to the documented
macro, prevent such uses in the future by moving the function
elsewhere and add the macro to the prelude.
- 'types' module: add improved version of 'ForeignOwnable::borrow_mut'
(which was removed in the past since it was problematic); change
'ForeignOwnable' pointer type to '*mut'.
- 'alloc' module: implement 'Display' for 'Box' and align the 'Debug'
implementation to it; add example (doctest) for 'ArrayLayout::new()'.
- 'sync' module: document 'PhantomData' in 'Arc'; use
'NonNull::new_unchecked' in 'ForeignOwnable for Arc' impl.
- 'uaccess' module: accept 'Vec's with different allocators in
'UserSliceReader::read_all'.
- 'workqueue' module: enable run-testing a couple more doctests.
- 'error' module: simplify 'from_errno()'.
- 'block' module: fix formatting in code documentation (a lint to catch
these is being implemented).
- Avoid 'unwrap()'s in doctests, which also improves the examples by
showing how kernel code is supposed to be written.
- Avoid 'as' casts with 'cast{,_mut}' calls which are a bit safer.
And a few other cleanups.
----------------------------------------------------------------
Alice Ryhl (1):
rust: kernel: add improved version of `ForeignOwnable::borrow_mut`
Daniel Sedlak (5):
rust: error: modify `from_errno` to use `try_from_errno`
rust: init: replace unwraps with question mark operators
rust: rbtree: remove unwrap in asserts
rust: page: remove unnecessary helper function from doctest
rust: str: replace unwraps with question mark operators
Dirk Behme (1):
rust: workqueue: Enable execution of doctests
Filipe Xavier (1):
rust: uaccess: generalize userSliceReader to support any Vec
Gary Guo (2):
rust: map `long` to `isize` and `char` to `u8`
rust: cleanup unnecessary casts
Guangbo Cui (2):
rust: alloc: implement Display for Box
rust: alloc: align Debug implementation for Box with Display
HONG Yifan (1):
kbuild: rust: add PROCMACROLDFLAGS
Jimmy Ostler (3):
rust: error: import `kernel`'s `LayoutError` instead of `core`'s
rust: init: update `stack_try_pin_init` examples
rust: alloc: add doctest for `ArrayLayout::new()`
Miguel Ojeda (7):
rust: finish using custom FFI integer types
rust: document `bindgen` 0.71.0 regression
rust: give Clippy the minimum supported Rust version
rust: kbuild: run Clippy for `rusttest` code
rust: use the `build_error!` macro, not the hidden function
rust: kernel: move `build_error` hidden function to prevent mistakes
rust: add `build_error!` to the prelude
Tamir Duberstein (7):
rust: sync: document `PhantomData` in `Arc`
rust: use host dylib naming convention to support macOS
rust: arc: use `NonNull::new_unchecked`
rust: types: avoid `as` casts
rust: arc: split unsafe block, add missing comment
rust: kernel: change `ForeignOwnable` pointer to mut
rust: kernel: reorder `ForeignOwnable` items
Xiangfei Ding (1):
rust: use derive(CoercePointee) on rustc >= 1.84.0
Yutaro Ohno (1):
rust: block: fix formatting in GenDisk doc
.clippy.toml | 2 +
.gitignore | 1 +
Documentation/kbuild/kbuild.rst | 11 +++++
Makefile | 5 +-
drivers/gpu/drm/drm_panic_qr.rs | 2 +-
init/Kconfig | 9 +++-
rust/Makefile | 32 +++++++------
rust/ffi.rs | 37 ++++++++++++++-
rust/kernel/alloc.rs | 2 +-
rust/kernel/alloc/kbox.rs | 53 +++++++++++++++++-----
rust/kernel/alloc/layout.rs | 19 ++++++++
rust/kernel/block/mq/gen_disk.rs | 6 +--
rust/kernel/block/mq/operations.rs | 3 +-
rust/kernel/build_assert.rs | 12 +++--
rust/kernel/device.rs | 4 +-
rust/kernel/error.rs | 23 ++++------
rust/kernel/firmware.rs | 2 +-
rust/kernel/init.rs | 30 +++++++++---
rust/kernel/lib.rs | 13 +++---
rust/kernel/list/arc.rs | 9 ++--
rust/kernel/miscdevice.rs | 18 +++-----
rust/kernel/net/phy.rs | 18 ++++----
rust/kernel/page.rs | 6 +--
rust/kernel/prelude.rs | 2 +-
rust/kernel/print.rs | 4 +-
rust/kernel/rbtree.rs | 46 +++++++++----------
rust/kernel/security.rs | 2 +-
rust/kernel/seq_file.rs | 2 +-
rust/kernel/str.rs | 38 ++++++++++------
rust/kernel/sync/arc.rs | 65 +++++++++++++++++++-------
rust/kernel/types.rs | 93 ++++++++++++++++++++++++++++----------
rust/kernel/uaccess.rs | 33 ++++----------
rust/kernel/workqueue.rs | 3 ++
rust/macros/lib.rs | 8 ++--
samples/rust/rust_print_main.rs | 20 +++++++-
scripts/generate_rust_analyzer.py | 15 ++++--
scripts/rust_is_available.sh | 6 ++-
37 files changed, 437 insertions(+), 217 deletions(-)
Powered by blists - more mailing lists