For some pointer types it is helpful to be able to differentiate between
the `TimerPointer` and the type passed to the timer callback.
Signed-off-by: Andreas Hindborg <a.hindborg@kernel.org>
---
rust/kernel/hrtimer.rs | 7 ++++++-
rust/kernel/hrtimer/arc.rs | 1 +
rust/kernel/hrtimer/pin.rs | 1 +
rust/kernel/hrtimer/pin_mut.rs | 1 +
4 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/rust/kernel/hrtimer.rs b/rust/kernel/hrtimer.rs
index 6254fa584464..38160221f93e 100644
--- a/rust/kernel/hrtimer.rs
+++ b/rust/kernel/hrtimer.rs
@@ -38,6 +38,7 @@
//!
//! impl TimerCallback for ArcIntrusiveTimer {
//! type CallbackTarget<'a> = Arc<Self>;
+//! type CallbackPointer<'a> = Arc<Self>;
//!
//! fn run(this: Self::CallbackTarget<'_>) -> TimerRestart {
//! pr_info!("Timer called\n");
@@ -104,6 +105,7 @@
//!
//! impl TimerCallback for IntrusiveTimer {
//! type CallbackTarget<'a> = Pin<&'a Self>;
+//! type CallbackPointer<'a> = Pin<&'a Self>;
//!
//! fn run(this: Self::CallbackTarget<'_>) -> TimerRestart {
//! pr_info!("Timer called\n");
@@ -335,8 +337,11 @@ pub trait TimerCallback {
/// The type that was used for scheduling the timer.
type CallbackTarget<'a>: RawTimerCallback;
+ /// The type passed to the timer callback function.
+ type CallbackPointer<'a>;
+
/// Called by the timer logic when the timer fires.
- fn run(this: Self::CallbackTarget<'_>) -> TimerRestart
+ fn run(this: Self::CallbackPointer<'_>) -> TimerRestart
where
Self: Sized;
}
diff --git a/rust/kernel/hrtimer/arc.rs b/rust/kernel/hrtimer/arc.rs
index fb8a40484add..ff04b0b75bb3 100644
--- a/rust/kernel/hrtimer/arc.rs
+++ b/rust/kernel/hrtimer/arc.rs
@@ -67,6 +67,7 @@ impl<U> RawTimerCallback for Arc<U>
where
U: HasTimer<U>,
U: for<'a> TimerCallback<CallbackTarget<'a> = Self>,
+ U: for<'a> TimerCallback<CallbackPointer<'a> = Self>,
{
unsafe extern "C" fn run(ptr: *mut bindings::hrtimer) -> bindings::hrtimer_restart {
// `Timer` is `repr(transparent)`
diff --git a/rust/kernel/hrtimer/pin.rs b/rust/kernel/hrtimer/pin.rs
index f9ce0498a0d2..d34e0885f0f6 100644
--- a/rust/kernel/hrtimer/pin.rs
+++ b/rust/kernel/hrtimer/pin.rs
@@ -74,6 +74,7 @@ impl<'a, U> RawTimerCallback for Pin<&'a U>
where
U: HasTimer<U>,
U: TimerCallback<CallbackTarget<'a> = Self>,
+ U: TimerCallback<CallbackPointer<'a> = Self>,
{
unsafe extern "C" fn run(ptr: *mut bindings::hrtimer) -> bindings::hrtimer_restart {
// `Timer` is `repr(transparent)`
diff --git a/rust/kernel/hrtimer/pin_mut.rs b/rust/kernel/hrtimer/pin_mut.rs
index e25c7158ae4f..2589720df233 100644
--- a/rust/kernel/hrtimer/pin_mut.rs
+++ b/rust/kernel/hrtimer/pin_mut.rs
@@ -76,6 +76,7 @@ impl<'a, U> RawTimerCallback for Pin<&'a mut U>
where
U: HasTimer<U>,
U: TimerCallback<CallbackTarget<'a> = Self>,
+ U: TimerCallback<CallbackPointer<'a> = Self>,
{
unsafe extern "C" fn run(ptr: *mut bindings::hrtimer) -> bindings::hrtimer_restart {
// `Timer` is `repr(transparent)`
--
2.46.0