Rust for Linux List
 help / color / mirror / Atom feed
* [PATCH v3 0/2] rust: use Delta and new Jiffies type instead of raw jiffies for timeouts and delays
@ 2026-07-17  4:22 FUJITA Tomonori
  2026-07-17  4:22 ` [PATCH v3 1/2] rust: time: add Delta::as_millis_ceil() FUJITA Tomonori
  2026-07-17  4:22 ` [PATCH v3 2/2] rust: use Delta and a Jiffies newtype for timeouts and delays FUJITA Tomonori
  0 siblings, 2 replies; 3+ messages in thread
From: FUJITA Tomonori @ 2026-07-17  4:22 UTC (permalink / raw)
  To: a.hindborg, aliceryhl, arve, boqun, brauner, cmllamas, gary,
	gregkh, ojeda, tkjos
  Cc: acourbot, anna-maria, bjorn3_gh, dakr, daniel.almeida, frederic,
	jstultz, lossin, lyude, sboyd, tamird, tglx, tmgross, work,
	rust-for-linux, FUJITA Tomonori

From: FUJITA Tomonori <fujita.tomonori@gmail.com>

CondVar::wait_interruptible_timeout() and Queue::enqueue_delayed() use
a raw jiffies count (a plain c_ulong alias with no type
safety). Callers have to know on their own that the value meant
jiffies and convert to/from it themselves, which is easy to get wrong
(e.g. passing a millisecond value where a jiffies value is expected).

Unlike the previous versions, v3 introduces a dedicated `Jiffies`
newtype instead. The APIs take `impl Into<Jiffies>`, so a caller can
pass either a `Delta` (the duration is converted once, rounding up) or
a `Jiffies` directly with no conversion. Jiffies returned by the C
side stay as `Jiffies`, so a caller that works in jiffies never
converts and the round trip is gone.

Why a `Jiffies` type, but no `Micros`/`Nanos`/... types?

`Delta` represents a span of time as a nanosecond count. Microseconds,
milliseconds and seconds are exact multiples of a nanosecond, so they
embed into `Delta` losslessly and round-trip through it losslessly; they
are already covered by Delta's constructors and accessors (from_millis(),
as_millis_ceil(), ...) and would gain nothing from their own types.

A jiffy is 1/HZ of a second, which is generally not an exact number of
nanoseconds (e.g. HZ=300). Converting between jiffies and Delta is
therefore inherently lossy in both directions, and that is exactly
what makes a jiffies count a distinct quantity -- a count of timer
ticks -- rather than just another way to spell a Delta. So it, and
only it, gets its own (unsigned) newtype.

The Delta -> Jiffies conversion reuses the C `__msecs_to_jiffies()`
helper -- the same routine the existing Rust `msecs_to_jiffies()`
wrapper already called. The arithmetic (and the range clamping) is
done on the C side so it works on 32-bit architectures.

v3:
- Add new Jiffies type and convert the APIs to take impl Into<Jiffies>
v2: https://lore.kernel.org/rust-for-linux/20260712235246.3069713-1-tomo@flapping.org/
- Fix potential overflow in from_jiffies()
- Fix inflating bug in as_jiffies_ceil()
- Add a patch to convert enqueue_delayed()
- Add a patch to remove Jiffies/Msecs aliases
v1: https://lore.kernel.org/rust-for-linux/20260704132558.2253275-1-tomo@aliasing.net/

FUJITA Tomonori (2):
  rust: time: add Delta::as_millis_ceil()
  rust: use Delta and a Jiffies newtype for timeouts and delays

 drivers/android/binder/process.rs |  7 ++--
 rust/kernel/sync/condvar.rs       | 21 +++++++---
 rust/kernel/time.rs               | 64 ++++++++++++++++++++++++++-----
 rust/kernel/workqueue.rs          | 11 ++++--
 4 files changed, 82 insertions(+), 21 deletions(-)


base-commit: 7059bdf4f04a3e14f4fafb3ac35fdca913e3e21a
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-07-17  4:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-17  4:22 [PATCH v3 0/2] rust: use Delta and new Jiffies type instead of raw jiffies for timeouts and delays FUJITA Tomonori
2026-07-17  4:22 ` [PATCH v3 1/2] rust: time: add Delta::as_millis_ceil() FUJITA Tomonori
2026-07-17  4:22 ` [PATCH v3 2/2] rust: use Delta and a Jiffies newtype for timeouts and delays FUJITA Tomonori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox