[PATCH v3] rust: hrtimer: Add forward_now() to HrTimer and HrTimerCallbackContext

From: Lyude Paul
Date: Tue Apr 15 2025 - 16:18:15 EST


Using the HrTimerClockBase::time() function, we can now add an equivalent
to hrtimer_forward_now() to both HrTimer and HrTimerCallbackContext.

Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx>

---
V2:
* Change from Ktime to Delta
* Make sure that forward_now() takes a mutable reference to the timer
struct
* Reword this to point out that we're adding forward_now() to both callback
context and mutable timer reference
* Rename interval to duration
V3:
* Fix rust documentation for HrTimerCallbackContext (forgot to update both
forward_now() declarations)

Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx>
---
rust/kernel/time/hrtimer.rs | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

diff --git a/rust/kernel/time/hrtimer.rs b/rust/kernel/time/hrtimer.rs
index 4da1e72e016d1..ec7800ac20616 100644
--- a/rust/kernel/time/hrtimer.rs
+++ b/rust/kernel/time/hrtimer.rs
@@ -217,6 +217,14 @@ pub fn forward(&mut self, now: Instant, duration: Delta) -> u64 {
// timer callback context - fulfilling the requirements of the C API.
unsafe { Self::raw_forward(self, now, duration) }
}
+
+ /// Forward the time expiry so it expires at `duration` after the current time.
+ ///
+ /// This is a variant of [`forward`](Self::forward) that uses a duration after the current time
+ /// of the [`HrTimerClockBase`] for this [`HrTimerCallbackContext`].
+ pub fn forward_now(&mut self, duration: Delta) -> u64 {
+ self.forward(self.clock_base().time(), duration)
+ }
}

/// The timer base for a specific clock.
@@ -612,6 +620,14 @@ pub fn forward(&mut self, now: Instant, duration: Delta) -> u64 {
// - By our type invariants, `self.0` always points to a valid `HrTimer<T>`
unsafe { HrTimer::<T>::raw_forward(self.0.as_ptr(), now, duration) }
}
+
+ /// Forward the timer expiry so it expires at `duration` after the current time.
+ ///
+ /// This is a variant of [`HrTimerCallbackContext::forward()`] that uses an interval after the
+ /// current time of the [`HrTimerClockBase`] for this [`HrTimerCallbackContext`].
+ pub fn forward_now(&mut self, duration: Delta) -> u64 {
+ self.forward(self.clock_base().time(), duration)
+ }
}

/// Use to implement the [`HasHrTimer<T>`] trait.
--
2.48.1