[PATCH v4 0/7] rust: workqueue: add bindings for the workqueue

Alice Ryhl posted 7 patches 2 years, 3 months ago
rust/bindings/bindings_helper.h |   1 +
rust/helpers.c                  |  13 +
rust/kernel/lib.rs              |   3 +
rust/kernel/sync/arc.rs         |  46 ++-
rust/kernel/workqueue.rs        | 679 ++++++++++++++++++++++++++++++++
scripts/Makefile.build          |   2 +-
6 files changed, 741 insertions(+), 3 deletions(-)
create mode 100644 rust/kernel/workqueue.rs
[PATCH v4 0/7] rust: workqueue: add bindings for the workqueue
Posted by Alice Ryhl 2 years, 3 months ago
This patchset contains 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`.

This patchset depends on the patch [1] that changes `Opaque` to be
`!Unpin` for correctness. The patchset is based on the rust-6.6 tag,
since that tag includes that patch.

Changes v3 -> v4:

 * Use `offset_of!` macro from standard library, and drop patch with
   custom implementation.
 * Add name parameter to `work_struct` constructor, and drop patch with
   __INIT_WORK_WITH_KEY.
 * Various improvements to documentation and comments.

More detailed changelogs can be found on the individual patches.

Previous versions:
v1: https://lore.kernel.org/all/20230517203119.3160435-1-aliceryhl@google.com/
v2: https://lore.kernel.org/all/20230601134946.3887870-1-aliceryhl@google.com/
v3: https://lore.kernel.org/all/20230711093303.1433770-1-aliceryhl@google.com/

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

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 (2):
  rust: sync: add `Arc::{from_raw, into_raw}`
  rust: workqueue: define built-in queues

 rust/bindings/bindings_helper.h |   1 +
 rust/helpers.c                  |  13 +
 rust/kernel/lib.rs              |   3 +
 rust/kernel/sync/arc.rs         |  46 ++-
 rust/kernel/workqueue.rs        | 679 ++++++++++++++++++++++++++++++++
 scripts/Makefile.build          |   2 +-
 6 files changed, 741 insertions(+), 3 deletions(-)
 create mode 100644 rust/kernel/workqueue.rs

base-commit: 4af84c6a85c63bec24611e46bb3de2c0a6602a51
-- 
2.42.0.rc1.204.g551eb34607-goog
Re: [PATCH v4 0/7] rust: workqueue: add bindings for the workqueue
Posted by Tejun Heo 2 years, 2 months ago
On Mon, Aug 28, 2023 at 10:48:00AM +0000, Alice Ryhl wrote:
> This patchset contains 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`.
> 
> This patchset depends on the patch [1] that changes `Opaque` to be
> `!Unpin` for correctness. The patchset is based on the rust-6.6 tag,
> since that tag includes that patch.

Applied to wq/for-6.7-rust-bindings with Boqun's reviewed-by's added.

Thanks.

-- 
tejun
Re: [PATCH v4 0/7] rust: workqueue: add bindings for the workqueue
Posted by Boqun Feng 2 years, 3 months ago
On Mon, Aug 28, 2023 at 10:48:00AM +0000, Alice Ryhl wrote:
> This patchset contains 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`.
> 
> This patchset depends on the patch [1] that changes `Opaque` to be
> `!Unpin` for correctness. The patchset is based on the rust-6.6 tag,
> since that tag includes that patch.
> 
> Changes v3 -> v4:
> 
>  * Use `offset_of!` macro from standard library, and drop patch with
>    custom implementation.
>  * Add name parameter to `work_struct` constructor, and drop patch with
>    __INIT_WORK_WITH_KEY.
>  * Various improvements to documentation and comments.
> 
> More detailed changelogs can be found on the individual patches.
> 

For the whole series:

Reviewed-by: Boqun Feng <boqun.feng@gmail.com>

Regards,
Boqun

> Previous versions:
> v1: https://lore.kernel.org/all/20230517203119.3160435-1-aliceryhl@google.com/
> v2: https://lore.kernel.org/all/20230601134946.3887870-1-aliceryhl@google.com/
> v3: https://lore.kernel.org/all/20230711093303.1433770-1-aliceryhl@google.com/
> 
> [1]: https://lore.kernel.org/all/20230630150216.109789-1-benno.lossin@proton.me/
> 
> 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 (2):
>   rust: sync: add `Arc::{from_raw, into_raw}`
>   rust: workqueue: define built-in queues
> 
>  rust/bindings/bindings_helper.h |   1 +
>  rust/helpers.c                  |  13 +
>  rust/kernel/lib.rs              |   3 +
>  rust/kernel/sync/arc.rs         |  46 ++-
>  rust/kernel/workqueue.rs        | 679 ++++++++++++++++++++++++++++++++
>  scripts/Makefile.build          |   2 +-
>  6 files changed, 741 insertions(+), 3 deletions(-)
>  create mode 100644 rust/kernel/workqueue.rs
> 
> base-commit: 4af84c6a85c63bec24611e46bb3de2c0a6602a51
> -- 
> 2.42.0.rc1.204.g551eb34607-goog
>