On 26.04.25 6:54 PM, Boqun Feng wrote: > On Sat, Apr 26, 2025 at 06:44:03PM +0200, Christian Schrefl wrote: >> On 26.04.25 3:30 PM, Danilo Krummrich wrote: >>> Implement an unsafe direct accessor for the data stored within the >>> Revocable. >>> >>> This is useful for cases where we can proof that the data stored within >>> the Revocable is not and cannot be revoked for the duration of the >>> lifetime of the returned reference. >>> >>> Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx> >>> --- >>> The explicit lifetimes in access() probably don't serve a practical >>> purpose, but I found them to be useful for documentation purposes. >>> ---> rust/kernel/revocable.rs | 12 ++++++++++++ >>> 1 file changed, 12 insertions(+) >>> >>> diff --git a/rust/kernel/revocable.rs b/rust/kernel/revocable.rs >>> index 971d0dc38d83..33535de141ce 100644 >>> --- a/rust/kernel/revocable.rs >>> +++ b/rust/kernel/revocable.rs >>> @@ -139,6 +139,18 @@ pub fn try_access_with<R, F: FnOnce(&T) -> R>(&self, f: F) -> Option<R> { >>> self.try_access().map(|t| f(&*t)) >>> } >>> >>> + /// Directly access the revocable wrapped object. >>> + /// >>> + /// # Safety >>> + /// >>> + /// The caller must ensure this [`Revocable`] instance hasn't been revoked and won't be revoked >>> + /// for the duration of `'a`. >>> + pub unsafe fn access<'a, 's: 'a>(&'s self) -> &'a T { >> I'm not sure if the `'s` lifetime really carries much meaning here. >> I find just (explicit) `'a` on both parameter and return value is clearer to me, >> but I'm not sure what others (particularly those not very familiar with rust) >> think of this. > > Yeah, I don't think we need two lifetimes here, the following version > should be fine (with implicit lifetime): > > pub unsafe fn access(&self) -> &T { ... } > > , because if you do: > > let revocable: &'1 Revocable = ...; > ... > let t: &'2 T = unsafe { revocable.access() }; > > '1 should already outlive '2 (i.e. '1: '2). I understand that implicit lifetimes desugars to effectively the same code, I just think that keeping a explicit 'a makes it a bit more obvious that the lifetimes need to be considered here. But I'm also fine with just implicit lifetimes here. Cheers Christian