workqueue: rust: add delayed work items
authorAlice Ryhl <aliceryhl@google.com>
Fri, 11 Jul 2025 07:59:40 +0000 (07:59 +0000)
committerMiguel Ojeda <ojeda@kernel.org>
Tue, 15 Jul 2025 20:54:52 +0000 (22:54 +0200)
commit7c098cd5eaae557934f4e4ea0b2809a9972f6a5a
tree3115c9323b752ea6662c01d93292b3def3ffee8d
parent64fb810bce03a4e2b4d3ecbba04bb97da3536dd8
workqueue: rust: add delayed work items

This patch is being sent for use in the various Rust GPU drivers that
are under development. It provides the additional feature of work items
that are executed after a delay.

The design of the existing workqueue is rather extensible, as most of
the logic is reused for delayed work items even though a different work
item type is required. The new logic consists of:

* A new DelayedWork struct that wraps struct delayed_work.
* A new impl_has_delayed_work! macro that provides adjusted versions of
  the container_of logic, that is suitable with delayed work items.
* A `enqueue_delayed` method that can enqueue a delayed work item.

This patch does *not* rely on the fact that `struct delayed_work`
contains `struct work_struct` at offset zero. It will continue to work
even if the layout is changed to hold the `work` field at a different
offset.

Please see the example introduced at the top of the file for example
usage of delayed work items.

Acked-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20250711-workqueue-delay-v3-1-3fe17b18b9d1@google.com
[ Replaced `as _` with `as ffi::c_int` to clean warning. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
rust/kernel/workqueue.rs