[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <874j0vv6lf.fsf@kernel.org>
Date: Sat, 15 Feb 2025 11:35:08 +0100
From: Andreas Hindborg <a.hindborg@...nel.org>
To: "Lyude Paul" <lyude@...hat.com>
Cc: "Miguel Ojeda" <ojeda@...nel.org>, "Anna-Maria Behnsen"
<anna-maria@...utronix.de>, "Frederic Weisbecker" <frederic@...nel.org>,
"Thomas Gleixner" <tglx@...utronix.de>, "Danilo Krummrich"
<dakr@...nel.org>, "Alex Gaynor" <alex.gaynor@...il.com>, "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>, "Trevor Gross" <tmgross@...ch.edu>,
"Guangbo Cui" <2407018371@...com>, "Dirk Behme" <dirk.behme@...il.com>,
"Daniel Almeida" <daniel.almeida@...labora.com>, "Tamir Duberstein"
<tamird@...il.com>, <rust-for-linux@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v7 04/14] rust: hrtimer: implement `HrTimerPointer` for
`Arc`
"Lyude Paul" <lyude@...hat.com> writes:
> On Mon, 2025-02-03 at 16:07 +0100, Andreas Hindborg wrote:
>> This patch allows the use of intrusive `hrtimer` fields in structs that are
>> managed by an `Arc`.
>>
>> Signed-off-by: Andreas Hindborg <a.hindborg@...nel.org>
>> ---
>> rust/kernel/time/hrtimer.rs | 3 +-
>> rust/kernel/time/hrtimer/arc.rs | 89 +++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 91 insertions(+), 1 deletion(-)
>>
>> diff --git a/rust/kernel/time/hrtimer.rs b/rust/kernel/time/hrtimer.rs
>> index a6332924efabd40c475a112bbc434db77596a16f..3494c00481a4bd25735edf44b6bdcbec9810243e 100644
>> --- a/rust/kernel/time/hrtimer.rs
>> +++ b/rust/kernel/time/hrtimer.rs
>> @@ -119,7 +119,6 @@ unsafe fn raw_get(ptr: *const Self) -> *mut bindings::hrtimer {
>> /// # Safety
>> ///
>> /// `self_ptr` must point to a valid `Self`.
>> - #[allow(dead_code)]
>> pub(crate) unsafe fn raw_cancel(self_ptr: *const Self) -> bool {
>> // SAFETY: timer_ptr points to an allocation of at least `HrTimer` size.
>> let c_timer_ptr = unsafe { HrTimer::raw_get(self_ptr) };
>> @@ -310,3 +309,5 @@ unsafe fn raw_get_timer(ptr: *const Self) ->
>> }
>> }
>> }
>> +
>> +mod arc;
>> diff --git a/rust/kernel/time/hrtimer/arc.rs b/rust/kernel/time/hrtimer/arc.rs
>> new file mode 100644
>> index 0000000000000000000000000000000000000000..d1c90631d00362bdc38be1ccc75429ae294ab544
>> --- /dev/null
>> +++ b/rust/kernel/time/hrtimer/arc.rs
>> @@ -0,0 +1,89 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +
>> +use super::HasHrTimer;
>> +use super::HrTimer;
>> +use super::HrTimerCallback;
>> +use super::HrTimerHandle;
>> +use super::HrTimerPointer;
>> +use super::RawHrTimerCallback;
>> +use crate::sync::Arc;
>> +use crate::sync::ArcBorrow;
>> +use crate::time::Ktime;
>> +
>> +/// A handle for an `Arc<HasHrTimer<T>>` returned by a call to
>> +/// [`HrTimerPointer::start`].
>> +pub struct ArcHrTimerHandle<T>
>> +where
>> + T: HasHrTimer<T>,
>> +{
>> + pub(crate) inner: Arc<T>,
>> +}
>> +
>
> BTW - I noticed the other day that it doesn't seem like we actually expose
> this type to users anywhere, even though we would want access to it for
> storing the timer handle in structures
>
Thanks for noticing! I'll make sure to `pub use` then handles in the
parent module.
Best regards,
Andreas Hindborg
Powered by blists - more mailing lists