[PATCH v5 2/7] rust: time: add jiffies time unit for Delta
FUJITA Tomonori <[email protected]> Thu, 6 Aug 2026 16:32:36 +0900
| Newsgroups | org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
From: FUJITA Tomonori <[email protected]> Add a Jiffy time unit with isize as its representation and provide Delta<Jiffy>::from_jiffies() and as_jiffies() as the unit-specific constructor and accessor, mirroring from_nanos()/as_nanos() on the nanosecond Delta. Represent the jiffies span as isize: Delta is a signed span (nanoseconds use i64) and, as a timeout, the value only needs to reach MAX_JIFFY_OFFSET ((LONG_MAX >> 1) - 1). isize is signed and matches the kernel's c_long, so it meets both. Reviewed-by: Gary Guo <[email protected]> Signed-off-by: FUJITA Tomonori <[email protected]> --- rust/kernel/time.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/rust/kernel/time.rs b/rust/kernel/time.rs index 589bd7827523..71f6dafc79e5 100644 --- a/rust/kernel/time.rs +++ b/rust/kernel/time.rs @@ -295,6 +295,7 @@ mod private { pub trait Sealed {} impl Sealed for super::Nsec {} + impl Sealed for super::Jiffy {} } /// A trait for time units. @@ -314,6 +315,17 @@ impl TimeUnit for Nsec { type Repr = i64; } +/// A time unit of jiffies. +/// +/// A [`Delta<Jiffy>`] stores its value as `isize` jiffies and can represent +/// any `isize` value, including negative, zero, and positive numbers. +#[derive(Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Debug)] +pub struct Jiffy; + +impl TimeUnit for Jiffy { + type Repr = isize; +} + /// A span of time. /// /// The span is stored in the unit given by the type parameter `U` (see @@ -325,6 +337,20 @@ pub struct Delta<U: TimeUnit = Nsec> { value: U::Repr, } +impl Delta<Jiffy> { + /// Create a new [`Delta`] from a number of jiffies. + #[inline] + pub const fn from_jiffies(jiffies: isize) -> Self { + Self { value: jiffies } + } + + /// Return the number of jiffies in the [`Delta`]. + #[inline] + pub const fn as_jiffies(self) -> isize { + self.value + } +} + impl ops::Add for Delta { type Output = Self; -- 2.43.0