[v2,00/12] Quality of life improvements for pin-init

Message ID 20230719141918.543938-1-benno.lossin@proton.me
Headers
Series Quality of life improvements for pin-init |

Message

Benno Lossin July 19, 2023, 2:20 p.m. UTC
  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

This is the second version of this patch series.
* v1: https://lore.kernel.org/rust-for-linux/20230624092330.157338-1-benno.lossin@proton.me/

Changes not present on modified commits:
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 (12):
  rust: init: consolidate init macros
  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 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            | 633 ++++++++++++++-------------------
 rust/kernel/init/__internal.rs |  39 +-
 rust/kernel/init/macros.rs     | 510 +++++++++++++++++++++++---
 rust/kernel/prelude.rs         |   2 +-
 rust/kernel/types.rs           |   2 +
 rust/macros/lib.rs             |  20 ++
 rust/macros/quote.rs           |   6 +
 rust/macros/zeroable.rs        |  25 ++
 8 files changed, 784 insertions(+), 453 deletions(-)
 create mode 100644 rust/macros/zeroable.rs


base-commit: 6946437838b0ec7c976252f5d1872d4d8b679515
  

Comments

Benno Lossin July 19, 2023, 3:23 p.m. UTC | #1
On 19.07.23 16:20, Benno Lossin wrote:
> 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
> 
> This is the second version of this patch series.
> * v1: https://lore.kernel.org/rust-for-linux/20230624092330.157338-1-benno.lossin@proton.me/
> 
> Changes not present on modified commits:
> 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

I forgot to mention that this patch series is based on rust-dev [1],
as it depends on Gary's `paste!` macro.

[1]: https://github.com/Rust-for-Linux/linux/tree/rust-dev
     Repository: https://github.com/Rust-for-Linux/linux.git rust-dev