mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-29 21:33:00 +01: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 <[email protected]> Acked-by: Thomas Gleixner <[email protected]> Reviewed-by: Benno Lossin <[email protected]> Reviewed-by: Tamir Duberstein <[email protected]> Reviewed-by: Lyude Paul <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Andreas Hindborg <[email protected]>
This commit is contained in:
1 parent
d7bf4786b5
commit
94e05a66ea
2 files changed
+20
-4
No files matched your search
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user