[PATCH v3 0/9] rust: workqueue: add bindings for the workqueue

From: Alice Ryhl
Date: Tue Jul 11 2023 - 05:34:02 EST


This patchset contains Rust bindings for the kernel workqueue.

One of the primary goals behind the design used in this patch is that we
must support embedding the `work_struct` as a field in user-provided
types, because this allows you to submit things to the workqueue without
having to allocate, making the submission infallible. If we didn't have
to support this, then the patch would be much simpler. One of the main
things that make it complicated is that we must ensure that the function
pointer in the `work_struct` is compatible with the struct it is
contained within.

The original version of the workqueue bindings was written by Wedson,
but I have rewritten much of it so that it uses the pin-init
infrastructure and can be used with containers other than `Arc`.

Changes v2 -> v3:

* Moved dependency patches so they are first.
* Various documentation and comment improvements.
* Changed implementation of `Arc::from_raw`.
* Use __INIT_WORK_WITH_KEY instead of __INIT_WORK and use `LockClassKey`
where appropriate.
* Removed PhantomPinned from Work. This depends on [1] for correctness.

More detailed changelogs can be found on the individual patches.

v1: https://lore.kernel.org/all/20230517203119.3160435-1-aliceryhl@xxxxxxxxxx/
v2: https://lore.kernel.org/all/20230601134946.3887870-1-aliceryhl@xxxxxxxxxx/

[1]: https://lore.kernel.org/all/20230630150216.109789-1-benno.lossin@xxxxxxxxx/

Alice Ryhl (5):
rust: workqueue: add low-level workqueue bindings
rust: workqueue: add helper for defining work_struct fields
rust: workqueue: implement `WorkItemPointer` for pointer types
rust: workqueue: add `try_spawn` helper method
rust: workqueue: add examples

Wedson Almeida Filho (4):
rust: add offset_of! macro
rust: sync: add `Arc::{from_raw, into_raw}`
workqueue: introduce `__INIT_WORK_WITH_KEY`
rust: workqueue: define built-in queues

include/linux/workqueue.h | 17 +-
rust/bindings/bindings_helper.h | 1 +
rust/helpers.c | 8 +
rust/kernel/lib.rs | 39 ++
rust/kernel/sync/arc.rs | 49 ++-
rust/kernel/workqueue.rs | 659 ++++++++++++++++++++++++++++++++
scripts/Makefile.build | 2 +-
7 files changed, 767 insertions(+), 8 deletions(-)
create mode 100644 rust/kernel/workqueue.rs


base-commit: d2e3115d717197cb2bc020dd1f06b06538474ac3
--
2.41.0.255.g8b1d071c50-goog