From: FUJITA Tomonori <tomo@flapping.org>
To: a.hindborg@kernel.org, aliceryhl@google.com, arve@android.com,
boqun@kernel.org, brauner@kernel.org, cmllamas@google.com,
gary@garyguo.net, gregkh@linuxfoundation.org, ojeda@kernel.org,
tkjos@android.com
Cc: acourbot@nvidia.com, anna-maria@linutronix.de,
bjorn3_gh@protonmail.com, dakr@kernel.org,
daniel.almeida@collabora.com, frederic@kernel.org,
jstultz@google.com, lossin@kernel.org, lyude@redhat.com,
sboyd@kernel.org, tamird@kernel.org, tglx@kernel.org,
tmgross@umich.edu, work@onurozkan.dev,
rust-for-linux@vger.kernel.org,
FUJITA Tomonori <fujita.tomonori@gmail.com>
Subject: [PATCH v4 5/7] rust: workqueue: take a Delta<Jiffy> for the enqueue delay
Date: Thu, 23 Jul 2026 06:49:49 +0900 [thread overview]
Message-ID: <20260722214951.72941-6-tomo@flapping.org> (raw)
In-Reply-To: <20260722214951.72941-1-tomo@flapping.org>
From: FUJITA Tomonori <fujita.tomonori@gmail.com>
enqueue_delayed() takes the delay as a raw Jiffies (c_ulong). That is
the C representation rather than a kernel time type, so it neither
carries the unit in its type nor composes with the Delta arithmetic
used elsewhere for expressing spans, and it forces callers to hand the
API a bare integer.
Change the delay parameter to Delta<Jiffy> so a delay is expressed in
the same time vocabulary as the rest of the kernel crate. A signed
Delta can be negative, so clamp it to zero before handing it to the C
side, which keeps "no delay" the natural meaning of a non-positive
span.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
---
rust/kernel/workqueue.rs | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs
index 7e253b6f299c..d4f8a3ea5acb 100644
--- a/rust/kernel/workqueue.rs
+++ b/rust/kernel/workqueue.rs
@@ -171,7 +171,7 @@
//! /// This method will enqueue the struct for execution on the system workqueue, where its value
//! /// will be printed 12 jiffies later.
//! fn print_later(val: Arc<MyStruct>) {
-//! let _ = workqueue::system().enqueue_delayed(val, 12);
+//! let _ = workqueue::system().enqueue_delayed(val, kernel::time::Delta::from_jiffies(12));
//! }
//!
//! /// It is also possible to use the ordinary `enqueue` method together with `DelayedWork`. This
@@ -197,7 +197,10 @@
Arc,
LockClassKey, //
},
- time::Jiffies,
+ time::{
+ Delta,
+ Jiffy, //
+ },
types::Opaque,
};
use core::{marker::PhantomData, ptr::NonNull};
@@ -303,11 +306,14 @@ pub fn enqueue<W, const ID: u64>(&self, w: W) -> W::EnqueueOutput
/// This may fail if the work item is already enqueued in a workqueue.
///
/// The work item will be submitted using `WORK_CPU_UNBOUND`.
- pub fn enqueue_delayed<W, const ID: u64>(&self, w: W, delay: Jiffies) -> W::EnqueueOutput
+ pub fn enqueue_delayed<W, const ID: u64>(&self, w: W, delta: Delta<Jiffy>) -> W::EnqueueOutput
where
W: RawDelayedWorkItem<ID> + Send + 'static,
{
let queue_ptr = self.0.get();
+ // CAST: A negative delay is clamped to `0`, so the value is non-negative
+ // and fits in `c_ulong`.
+ let delay = delta.as_jiffies().max(0) as ffi::c_ulong;
// SAFETY: We only return `false` if the `work_struct` is already in a workqueue. The other
// `__enqueue` requirements are not relevant since `W` is `Send` and static.
--
2.43.0
next prev parent reply other threads:[~2026-07-22 21:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-22 21:49 [PATCH v4 0/7] rust: use Delta instead of raw jiffies for timeouts and delays FUJITA Tomonori
2026-07-22 21:49 ` [PATCH v4 1/7] rust: time: make Delta generic over its time unit FUJITA Tomonori
2026-07-22 21:49 ` [PATCH v4 2/7] rust: time: add jiffies time unit for Delta FUJITA Tomonori
2026-07-22 21:49 ` [PATCH v4 3/7] rust: time: add Delta::as_millis_ceil() FUJITA Tomonori
2026-07-22 21:49 ` [PATCH v4 4/7] rust: time: add Delta::to_jiffies() for timeout conversion FUJITA Tomonori
2026-07-22 21:49 ` FUJITA Tomonori [this message]
2026-07-22 21:49 ` [PATCH v4 6/7] rust: sync: condvar: use Delta<Jiffy> for timeout and result FUJITA Tomonori
2026-07-22 21:49 ` [PATCH v4 7/7] rust: time: remove unused Jiffies/Msecs helpers FUJITA Tomonori
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=20260722214951.72941-6-tomo@flapping.org \
--to=tomo@flapping.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=anna-maria@linutronix.de \
--cc=arve@android.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=brauner@kernel.org \
--cc=cmllamas@google.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=frederic@kernel.org \
--cc=fujita.tomonori@gmail.com \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=jstultz@google.com \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=sboyd@kernel.org \
--cc=tamird@kernel.org \
--cc=tglx@kernel.org \
--cc=tkjos@android.com \
--cc=tmgross@umich.edu \
--cc=work@onurozkan.dev \
/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.