[PATCH v4 00/13] Quality of life improvements for pin-init

From: Benno Lossin
Date: Mon Aug 14 2023 - 04:47:11 EST


This patch series adds several improvements to the pin-init api:
- a derive macro for the `Zeroable` trait,
- makes hygiene of fields in initializers behave like normal struct
initializers would behave,
- prevent stackoverflow without optimizations
- add `..Zeroable::zeroed()` syntax to zero missing fields,
- support arbitrary paths in initializer macros.

It is based on the `rust-dev` branch.

This is the fourth version of this patch series.
- v3: https://lore.kernel.org/rust-for-linux/20230729090838.225225-1-benno.lossin@xxxxxxxxx/
- v2: https://lore.kernel.org/rust-for-linux/20230719141918.543938-1-benno.lossin@xxxxxxxxx/
- v1: https://lore.kernel.org/rust-for-linux/20230624092330.157338-1-benno.lossin@xxxxxxxxx/

Changes not present on modified commits:
v3 -> v4:
No changes.

v2 -> v3:
- make `#[pin_data]` work better with `#[cfg]` attributes on fields.

v1 -> v2:
- implement `Zeroable` for `Opaque`,
- remove blanket impl of `PinInit` for `Init` and make it a supertrait
instead,
- add `{pin_}chain` functions to execute code after initialization,
- update the example macro expansion.

Benno Lossin (13):
rust: init: consolidate init macros
rust: init: make `#[pin_data]` compatible with conditional compilation
of fields
rust: add derive macro for `Zeroable`
rust: init: make guards in the init macros hygienic
rust: init: wrap type checking struct initializers in a closure
rust: init: make initializer values inaccessible after initializing
rust: init: add `..Zeroable::zeroed()` syntax for zeroing all missing
fields
rust: init: Add functions to create array initializers
rust: init: add support for arbitrary paths in init macros
rust: init: implement `Zeroable` for `UnsafeCell<T>` and `Opaque<T>`
rust: init: make `PinInit<T, E>` a supertrait of `Init<T, E>`
rust: init: add `{pin_}chain` functions to `{Pin}Init<T, E>`
rust: init: update expanded macro explanation

rust/kernel/init.rs | 646 ++++++++++++++-------------------
rust/kernel/init/__internal.rs | 39 +-
rust/kernel/init/macros.rs | 519 +++++++++++++++++++++++---
rust/kernel/prelude.rs | 2 +-
rust/macros/lib.rs | 20 +
rust/macros/quote.rs | 12 +
rust/macros/zeroable.rs | 72 ++++
7 files changed, 857 insertions(+), 453 deletions(-)
create mode 100644 rust/macros/zeroable.rs


base-commit: e73e793b32b7c440a53fd4da75a34c062841b66f
--
2.41.0