mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
rust: hrtimer: allow timer restart from timer handler
Allow timer handlers to report that they want a timer to be restarted after the timer handler has finished executing. Acked-by: Frederic Weisbecker <frederic@kernel.org> Acked-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Tamir Duberstein <tamird@gmail.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Link: https://lore.kernel.org/r/20250309-hrtimer-v3-v6-12-rc2-v12-4-73586e2bd5f1@kernel.org Signed-off-by: Andreas Hindborg <a.hindborg@kernel.org>
This commit is contained in:
parent
d7bf4786b5
commit
94e05a66ea
2 changed files with 20 additions and 4 deletions
|
@ -212,7 +212,7 @@ pub trait HrTimerCallback {
|
|||
type Pointer<'a>: RawHrTimerCallback;
|
||||
|
||||
/// Called by the timer logic when the timer fires.
|
||||
fn run(this: <Self::Pointer<'_> as RawHrTimerCallback>::CallbackTarget<'_>)
|
||||
fn run(this: <Self::Pointer<'_> as RawHrTimerCallback>::CallbackTarget<'_>) -> HrTimerRestart
|
||||
where
|
||||
Self: Sized;
|
||||
}
|
||||
|
@ -311,6 +311,24 @@ pub unsafe trait HasHrTimer<T> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Restart policy for timers.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||
#[repr(u32)]
|
||||
pub enum HrTimerRestart {
|
||||
/// Timer should not be restarted.
|
||||
#[allow(clippy::unnecessary_cast)]
|
||||
NoRestart = bindings::hrtimer_restart_HRTIMER_NORESTART as u32,
|
||||
/// Timer should be restarted.
|
||||
#[allow(clippy::unnecessary_cast)]
|
||||
Restart = bindings::hrtimer_restart_HRTIMER_RESTART as u32,
|
||||
}
|
||||
|
||||
impl HrTimerRestart {
|
||||
fn into_c(self) -> bindings::hrtimer_restart {
|
||||
self as bindings::hrtimer_restart
|
||||
}
|
||||
}
|
||||
|
||||
/// Use to implement the [`HasHrTimer<T>`] trait.
|
||||
///
|
||||
/// See [`module`] documentation for an example.
|
||||
|
|
|
@ -95,8 +95,6 @@ where
|
|||
// allocation from other `Arc` clones.
|
||||
let receiver = unsafe { ArcBorrow::from_raw(data_ptr) };
|
||||
|
||||
T::run(receiver);
|
||||
|
||||
bindings::hrtimer_restart_HRTIMER_NORESTART
|
||||
T::run(receiver).into_c()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue