Re: [PATCH v7 04/14] rust: hrtimer: implement `HrTimerPointer` for `Arc`
From: Andreas Hindborg
Date: Sat Feb 15 2025 - 05:59:53 EST
"Lyude Paul" <lyude@xxxxxxxxxx> 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@xxxxxxxxxx>
>> ---
>> 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