[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240917222739.1298275-12-a.hindborg@kernel.org>
Date: Wed, 18 Sep 2024 00:27:35 +0200
From: Andreas Hindborg <a.hindborg@...nel.org>
To: Miguel Ojeda <ojeda@...nel.org>,
Alex Gaynor <alex.gaynor@...il.com>,
Anna-Maria Behnsen <anna-maria@...utronix.de>,
Frederic Weisbecker <frederic@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>
Cc: Andreas Hindborg <a.hindborg@...nel.org>,
Boqun Feng <boqun.feng@...il.com>,
Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <benno.lossin@...ton.me>,
Alice Ryhl <aliceryhl@...gle.com>,
rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v2 11/14] rust: hrtimer: allow specifying a distinct callback parameter
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@...nel.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
Powered by blists - more mailing lists