All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alice Ryhl <aliceryhl@google.com>
To: rust-for-linux@vger.kernel.org, Tejun Heo <tj@kernel.org>,
	 Miguel Ojeda <ojeda@kernel.org>
Cc: "Lai Jiangshan" <jiangshanlai@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@gmail.com>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <benno.lossin@proton.me>,
	"Alice Ryhl" <aliceryhl@google.com>,
	linux-kernel@vger.kernel.org, patches@lists.linux.dev
Subject: [PATCH v3 0/9] rust: workqueue: add bindings for the workqueue
Date: Tue, 11 Jul 2023 09:32:54 +0000	[thread overview]
Message-ID: <20230711093303.1433770-1-aliceryhl@google.com> (raw)

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@google.com/
v2: https://lore.kernel.org/all/20230601134946.3887870-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 (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


             reply	other threads:[~2023-07-11  9:33 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-11  9:32 Alice Ryhl [this message]
2023-07-11  9:32 ` [PATCH v3 1/9] rust: add offset_of! macro Alice Ryhl
2023-08-21 18:43   ` Andreas Hindborg (Samsung)
2023-07-11  9:32 ` [PATCH v3 2/9] rust: sync: add `Arc::{from_raw, into_raw}` Alice Ryhl
2023-07-12 20:33   ` Martin Rodriguez Reboredo
2023-07-15  9:42   ` Benno Lossin
2023-07-17 13:47     ` Alice Ryhl
2023-08-22 11:46   ` Andreas Hindborg (Samsung)
2023-07-11  9:32 ` [PATCH 3/9] workqueue: introduce `__INIT_WORK_WITH_KEY` Alice Ryhl
2023-07-11 10:49   ` Alice Ryhl
2023-07-12  6:33   ` Boqun Feng
2023-07-12 20:34   ` Martin Rodriguez Reboredo
2023-07-11  9:32 ` [PATCH v3 4/9] rust: workqueue: add low-level workqueue bindings Alice Ryhl
2023-07-11 22:23   ` Boqun Feng
2023-07-17 13:53     ` Alice Ryhl
2023-07-11  9:32 ` [PATCH v3 5/9] rust: workqueue: define built-in queues Alice Ryhl
2023-07-11  9:33 ` [PATCH v3 6/9] rust: workqueue: add helper for defining work_struct fields Alice Ryhl
2023-07-12 20:43   ` Martin Rodriguez Reboredo
2023-07-15  9:43   ` Benno Lossin
2023-07-17 14:49     ` Alice Ryhl
2023-08-22 18:24     ` Andreas Hindborg (Samsung)
2023-08-23  9:06       ` Andreas Hindborg (Samsung)
2023-08-22 19:59   ` Andreas Hindborg (Samsung)
2023-07-11  9:33 ` [PATCH v3 7/9] rust: workqueue: implement `WorkItemPointer` for pointer types Alice Ryhl
2023-07-11  9:33 ` [PATCH v3 8/9] rust: workqueue: add `try_spawn` helper method Alice Ryhl
2023-07-11  9:33 ` [PATCH v3 9/9] rust: workqueue: add examples Alice Ryhl
2023-07-14 22:40   ` Boqun Feng
2023-07-11 22:17 ` [PATCH v3 0/9] rust: workqueue: add bindings for the workqueue Tejun Heo
2023-07-11 23:44   ` Miguel Ojeda
2023-07-12  0:27     ` Tejun Heo
2023-07-12 16:36       ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230711093303.1433770-1-aliceryhl@google.com \
    --to=aliceryhl@google.com \
    --cc=alex.gaynor@gmail.com \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=jiangshanlai@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=wedsonaf@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.