`alloc`, `#[expect]` and "Custom FFI"
Status from this message: This is a note to let you know that I've just added the patch titled
Get series with b4
b4 am [email protected]Versions newest first
Patches in v1 Applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/60 | rust: workqueue: remove unneeded ``#[allow(clippy::new_ret_no_self)]`rust/ | +0 | 1 reply | |
| 2/60 | rust: sort global Rust flagsMakefile | +4 | 1 reply | |
| 3/60 | rust: types: avoid repetition in `{As,From}Bytes` implsrust/ | +35 | 1 reply | |
| 4/60 | rust: enable `clippy::undocumented_unsafe_blocks` lintMakefile mm/ rust/ +13 more | +47 | 1 reply | |
| 5/60 | rust: enable `clippy::unnecessary_safety_comment` lintMakefile rust/ rust/ | +4 | 1 reply | |
| 6/60 | rust: enable `clippy::unnecessary_safety_doc` lintMakefile | +1 | 1 reply | |
| 7/60 | rust: enable `clippy::ignored_unit_patterns` lintMakefile rust/ | +2 | 1 reply | |
| 8/60 | rust: enable `rustdoc::unescaped_backticks` lintMakefile rust/ | +6 | 1 reply | |
| 9/60 | rust: init: remove unneeded `#[allow(clippy::disallowed_names)]`rust/ | +0 | 1 reply | |
| 10/60 | rust: sync: remove unneeded `#[allow(clippy::non_send_fields_in_send_ty)]`rust/ | +0 | 1 reply | |
| 11/60 | rust: introduce `.clippy.toml`.clippy.toml .gitignore MAINTAINERS +1 more | +6 | 1 reply | |
| 12/60 | rust: replace `clippy::dbg_macro` with `disallowed_macros`.clippy.toml Makefile rust/ +1 more | +12 | 1 reply | |
| 13/60 | rust: provide proper code documentation titlesrust/ rust/ rust/ | +8 | 1 reply | |
| 14/60 | rust: enable Clippy's `check-private-items`.clippy.toml rust/ rust/ +2 more | +7 | 1 reply | |
| 15/60 | Documentation: rust: add coding guidelines on lintsDocumentation/ | +38 | 1 reply | |
| 16/60 | rust: start using the `#[expect(...)]` attributerust/ rust/ rust/ +8 more | +31 | 1 reply | |
| 17/60 | Documentation: rust: discuss `#[expect(...)]` in the guidelinesDocumentation/ | +110 | 1 reply | |
| 18/60 | rust: error: make conversion functions publicrust/ | +4 | 1 reply | |
| 19/60 | rust: error: optimize error type to use nonzerorust/ | +28 | 1 reply | |
| 20/60 | rust: alloc: add `Allocator` traitrust/ | +101 | 1 reply | |
| 21/60 | rust: alloc: separate `aligned_size` from `krealloc_aligned`rust/ | +12 | 1 reply | |
| 22/60 | rust: alloc: rename `KernelAllocator` to `Kmalloc`rust/ | +3 | 1 reply | |
| 23/60 | rust: alloc: implement `ReallocFunc`rust/ rust/ | +79 | 1 reply | |
| 24/60 | rust: alloc: make `allocator` module publicrust/ | +1 | 1 reply | |
| 25/60 | rust: alloc: implement `Allocator` for `Kmalloc`rust/ | +28 | 1 reply | |
| 26/60 | rust: alloc: add module `allocator_test`rust/ rust/ | +27 | 1 reply | |
| 27/60 | rust: alloc: implement `Vmalloc` allocatorrust/ rust/ rust/ +1 more | +48 | 1 reply | |
| 28/60 | rust: alloc: implement `KVmalloc` allocatorrust/ rust/ rust/ | +43 | 1 reply | |
| 29/60 | rust: alloc: add __GFP_NOWARN to `Flags`rust/ rust/ | +6 | 1 reply | |
| 30/60 | rust: alloc: implement kernel `Box`rust/ rust/ rust/ | +463 | 1 reply | |
| 31/60 | rust: treewide: switch to our kernel `Box` typedrivers/ rust/ rust/ +7 more | +81 | 1 reply | |
| 32/60 | rust: alloc: remove extension of std's `Box`rust/ rust/ rust/ +3 more | +3 | 1 reply | |
| 33/60 | rust: alloc: add `Box` to preluderust/ | +1 | 1 reply | |
| 34/60 | rust: alloc: introduce `ArrayLayout`rust/ rust/ | +92 | 1 reply | |
| 35/60 | rust: alloc: implement kernel `Vec` typerust/ rust/ rust/ +1 more | +656 | 1 reply | |
| 36/60 | rust: alloc: implement `IntoIterator` for `Vec`rust/ rust/ | +171 | 1 reply | |
| 37/60 | rust: alloc: implement `collect` for `IntoIter`rust/ | +95 | 1 reply | |
| 38/60 | rust: treewide: switch to the kernel `Vec` typemm/ rust/ rust/ +4 more | +20 | 1 reply | |
| 39/60 | rust: alloc: remove `VecExt` extensionrust/ rust/ rust/ | +1 | 1 reply | |
| 40/60 | rust: alloc: add `Vec` to preluderust/ | +1 | 1 reply | |
| 41/60 | rust: error: use `core::alloc::LayoutError`rust/ | +1 | 1 reply | |
| 42/60 | rust: error: check for config `test` in `Error::name`rust/ | +2 | 1 reply | |
| 43/60 | rust: alloc: implement `contains` for `Flags`rust/ | +6 | 1 reply | |
| 44/60 | rust: alloc: implement `Cmalloc` in module allocator_testrust/ rust/ | +81 | 1 reply | |
| 45/60 | rust: str: test: replace `alloc::format`rust/ | +22 | 1 reply | |
| 46/60 | rust: alloc: update module comment of alloc.rsrust/ | +1 | 1 reply | |
| 47/60 | kbuild: rust: remove the `alloc` crate and `GlobalAlloc`rust/ rust/ rust/ +2 more | +16 | 1 reply | |
| 48/60 | MAINTAINERS: add entry for the Rust `alloc` moduleMAINTAINERS | +7 | 1 reply | |
| 49/60 | drm/panic: avoid reimplementing Iterator::finddrivers/ | +3 | 1 reply | |
| 50/60 | drm/panic: remove unnecessary borrow in alignment_patterndrivers/ | +1 | 1 reply | |
| 51/60 | drm/panic: prefer eliding lifetimesdrivers/ | +1 | 1 reply | |
| 52/60 | drm/panic: remove redundant field when assigning valuedrivers/ | +1 | 1 reply | |
| 53/60 | drm/panic: correctly indent continuation of line in list itemdrivers/ | +1 | 1 reply | |
| 54/60 | drm/panic: allow verbose boolean for claritydrivers/ | +4 | 1 reply | |
| 55/60 | drm/panic: allow verbose version checkdrivers/ | +1 | 1 reply | |
| 56/60 | rust: kbuild: expand rusttest target for macrosrust/ rust/ | +14 | 1 reply | |
| 57/60 | rust: fix size_t in bindgen prototypes of C builtinsrust/ | +5 | 1 reply | |
| 58/60 | rust: map `__kernel_size_t` and friends also to usize/isizerust/ rust/ rust/ | +15 | 1 reply | |
| 59/60 | rust: use custom FFI integer typesrust/ rust/ rust/ +20 more | +107 | 1 reply | |
| 60/60 | rust: alloc: Fix `ArrayLayout` allocationsrust/ | +1 | 1 reply |
Reviews trailers per patch
55 of 60 patches have a Reviewed-by or Acked-by of their own; the series has one for all of them.
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 9 reviewers.
Cover letter [PATCH 6.12.y 00/60] `alloc`, `#[expect]` and "Custom FFI"
Hi Greg, Sasha,
Please consider this series for 6.12.y. It should apply cleanly on top of v6.12.18.
These are the patches to backport the alloc series for Rust, which will be useful for Rust Android Binder and others. It also means that, with this applied, we will not rely on the standard library alloc (and the unstable cfg option we used) anymore in any stable kernel that supports several Rust versions, so e.g. upstream Rust could consider removing that cfg if they needed.
The entire series of cherry-picks apply almost cleanly (only 2 trivial conflicts) -- to achieve that, I included the #[expect] support, which will make future backports that use that feature easier anyway. That series also enabled some Clippy warnings. We could reduce the series, but the end result is warning-free and Clippy is opt-in anyway. Out-of-tree code could, of course, see some warnings if they use it.
I also included a bunch of Clippy warnings cleanups for the DRM QR Code to have this series clean up to Rust 1.85.0 (the latest stable), but I could send them separately if needed.
Finally, I included the "Custom FFI" series backport, which in turn solves the arm64 + Rust 1.85.0 + CONFIG_RUST_FW_LOADER_ABSTRACTIONS=y issue. It will also make future patches easier to backport, since we will have the same ffi:: types.
I tested that the entire series builds between every commit for x86_64 LLVM=1 with the latest stable and minimum supported Rust compiler versions. I also ran my usual stable kernel tests on the end result; that is, boot-tested in QEMU for several architectures etc. In v6.12.18 for loongarch there is an unrelated error that was not there in v6.12.17 when I did a previous test run -- reported separately.
Things could still break, so extra tests on the next -rc from users in Cc here would be welcome -- thanks!
Cheers,
Miguel
Asahi Lina (1):
rust: alloc: Fix ArrayLayout allocations
Benno Lossin (1):
rust: alloc: introduce ArrayLayout
Danilo Krummrich (28):
rust: alloc: add Allocator trait
rust: alloc: separate aligned_size from krealloc_aligned
rust: alloc: rename KernelAllocator to Kmalloc
rust: alloc: implement ReallocFunc
rust: alloc: make allocator module public
rust: alloc: implement Allocator for Kmalloc
rust: alloc: add module allocator_test
rust: alloc: implement Vmalloc allocator
rust: alloc: implement KVmalloc allocator
rust: alloc: add __GFP_NOWARN to Flags
rust: alloc: implement kernel Box
rust: treewide: switch to our kernel Box type
rust: alloc: remove extension of std's Box
rust: alloc: add Box to prelude
rust: alloc: implement kernel Vec type
rust: alloc: implement IntoIterator for Vec
rust: alloc: implement collect for IntoIter
rust: treewide: switch to the kernel Vec type
rust: alloc: remove VecExt extension
rust: alloc: add Vec to prelude
rust: error: use core::alloc::LayoutError
rust: error: check for config test in Error::name
rust: alloc: implement contains for Flags
rust: alloc: implement Cmalloc in module allocator_test
rust: str: test: replace alloc::format
rust: alloc: update module comment of alloc.rs
kbuild: rust: remove the alloc crate and GlobalAlloc
MAINTAINERS: add entry for the Rust alloc module
Ethan D. Twardy (1):
rust: kbuild: expand rusttest target for macros
Filipe Xavier (2):
rust: error: make conversion functions public
rust: error: optimize error type to use nonzero
Gary Guo (3):
rust: fix size_t in bindgen prototypes of C builtins
rust: map __kernel_size_t and friends also to usize/isize
rust: use custom FFI integer types
Miguel Ojeda (17):
rust: workqueue: remove unneeded ``#[allow(clippy::new_ret_no_self)]`
rust: sort global Rust flags
rust: types: avoid repetition in {As,From}Bytes impls
rust: enable clippy::undocumented_unsafe_blocks lint
rust: enable clippy::unnecessary_safety_comment lint
rust: enable clippy::unnecessary_safety_doc lint
rust: enable clippy::ignored_unit_patterns lint
rust: enable rustdoc::unescaped_backticks lint
rust: init: remove unneeded #[allow(clippy::disallowed_names)]
rust: sync: remove unneeded
`#[allow(clippy::non_send_fields_in_send_ty)]`
rust: introduce .clippy.toml
rust: replace clippy::dbg_macro with disallowed_macros
rust: provide proper code documentation titles
rust: enable Clippy's check-private-items
Documentation: rust: add coding guidelines on lints
rust: start using the #[expect(...)] attribute
Documentation: rust: discuss #[expect(...)] in the guidelines
Thomas Böhler (7):
drm/panic: avoid reimplementing Iterator::find drm/panic: remove unnecessary borrow in alignment_pattern drm/panic: prefer eliding lifetimes
drm/panic: remove redundant field when assigning value drm/panic: correctly indent continuation of line in list item drm/panic: allow verbose boolean for clarity drm/panic: allow verbose version check
.clippy.toml | 9 + .gitignore | 1 + Documentation/rust/coding-guidelines.rst | 148 ++++ MAINTAINERS | 8 + Makefile | 15 +- drivers/block/rnull.rs | 4 +- drivers/gpu/drm/drm_panic_qr.rs | 23 +- mm/kasan/kasan_test_rust.rs | 3 +- rust/Makefile | 92 +-- rust/bindgen_parameters | 5 + rust/bindings/bindings_helper.h | 1 + rust/bindings/lib.rs | 6 + rust/exports.c | 1 - rust/ffi.rs | 13 + rust/helpers/helpers.c | 1 + rust/helpers/slab.c | 6 + rust/helpers/vmalloc.c | 9 + rust/kernel/alloc.rs | 150 +++- rust/kernel/alloc/allocator.rs | 208 ++++-- rust/kernel/alloc/allocator_test.rs | 95 +++ rust/kernel/alloc/box_ext.rs | 89 --- rust/kernel/alloc/kbox.rs | 456 +++++++++++ rust/kernel/alloc/kvec.rs | 913 +++++++++++++++++++++++ rust/kernel/alloc/layout.rs | 91 +++ rust/kernel/alloc/vec_ext.rs | 185 ----- rust/kernel/block/mq/operations.rs | 18 +- rust/kernel/block/mq/raw_writer.rs | 2 +- rust/kernel/block/mq/tag_set.rs | 2 +- rust/kernel/error.rs | 79 +- rust/kernel/init.rs | 127 ++-- rust/kernel/init/__internal.rs | 13 +- rust/kernel/init/macros.rs | 18 +- rust/kernel/ioctl.rs | 2 +- rust/kernel/lib.rs | 5 +- rust/kernel/list.rs | 1 + rust/kernel/list/arc_field.rs | 2 +- rust/kernel/net/phy.rs | 16 +- rust/kernel/prelude.rs | 5 +- rust/kernel/print.rs | 5 +- rust/kernel/rbtree.rs | 49 +- rust/kernel/std_vendor.rs | 12 +- rust/kernel/str.rs | 46 +- rust/kernel/sync/arc.rs | 25 +- rust/kernel/sync/arc/std_vendor.rs | 2 + rust/kernel/sync/condvar.rs | 7 +- rust/kernel/sync/lock.rs | 8 +- rust/kernel/sync/lock/mutex.rs | 4 +- rust/kernel/sync/lock/spinlock.rs | 4 +- rust/kernel/sync/locked_by.rs | 2 +- rust/kernel/task.rs | 8 +- rust/kernel/time.rs | 4 +- rust/kernel/types.rs | 140 ++-- rust/kernel/uaccess.rs | 23 +- rust/kernel/workqueue.rs | 29 +- rust/macros/lib.rs | 14 +- rust/macros/module.rs | 8 +- rust/uapi/lib.rs | 6 + samples/rust/rust_minimal.rs | 4 +- samples/rust/rust_print.rs | 1 + scripts/Makefile.build | 4 +- scripts/generate_rust_analyzer.py | 11 +- 61 files changed, 2482 insertions(+), 756 deletions(-) create mode 100644 .clippy.toml create mode 100644 rust/ffi.rs create mode 100644 rust/helpers/vmalloc.c create mode 100644 rust/kernel/alloc/allocator_test.rs delete mode 100644 rust/kernel/alloc/box_ext.rs create mode 100644 rust/kernel/alloc/kbox.rs create mode 100644 rust/kernel/alloc/kvec.rs create mode 100644 rust/kernel/alloc/layout.rs delete mode 100644 rust/kernel/alloc/vec_ext.rs
--
2.48.1