[RFC PATCH v4 1/3] rust: DmaFence: remove static lifetime
From: Philipp Stanner
Date: Tue Sep 29 2026 - 07:13:31 EST
(will be upstreamed separately)
Signed-off-by: Philipp Stanner <phasta@xxxxxxxxxx>
---
rust/kernel/dma_buf/dma_fence.rs | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/rust/kernel/dma_buf/dma_fence.rs b/rust/kernel/dma_buf/dma_fence.rs
index 18a43e1bb442..eef2b9e93f35 100644
--- a/rust/kernel/dma_buf/dma_fence.rs
+++ b/rust/kernel/dma_buf/dma_fence.rs
@@ -291,7 +291,7 @@ fn from(e: AllocError) -> Self {
/// }
/// }
/// ```
-pub trait FenceCallback: Send + 'static {
+pub trait FenceCallback: Send {
/// Called when the fence is signaled.
///
/// This is called from the fence signaling path, which may be in interrupt
@@ -310,7 +310,7 @@ pub trait FenceCallback: Send + 'static {
/// When this object is dropped, the callback is automatically removed if it
/// hasn't been called yet.
#[pin_data(PinnedDrop)]
-pub struct FenceCallbackRegistration<T: FenceCallback + 'static> {
+pub struct FenceCallbackRegistration<T: FenceCallback> {
#[pin]
callback_foreign: Opaque<bindings::dma_fence_cb>,
callback: ManuallyDrop<T>,
@@ -326,7 +326,7 @@ impl<T: FenceCallback> FenceCallbackRegistration<T> {
/// On success the callback is pinned in place and will fire when the fence
/// signals. On `AlreadySignaled` the callback is returned to the caller so
/// that owned resources can be reclaimed.
- pub fn new<'a>(fence: &'a Fence, callback: T) -> impl PinInit<Self, CallbackError<T>> + 'a
+ pub unsafe fn new<'a>(fence: &'a Fence, callback: T) -> impl PinInit<Self, CallbackError<T>> + 'a
where
T: 'a,
{
@@ -693,7 +693,8 @@ struct DriverFenceData<'a, T: Send + Sync + FenceContextOps> {
///
/// let cb_data = CallbackData { };
/// let waiting_fence = ARef::from(fence.as_fence());
-/// let cb_reg = FenceCallbackRegistration::new(&waiting_fence, cb_data);
+/// // SAFETY: `cb_data`'s content is not forgotten.
+/// let cb_reg = unsafe { FenceCallbackRegistration::new(&waiting_fence, cb_data) };
/// let cb_reg = KBox::pin_init(cb_reg, GFP_KERNEL)?;
///
/// // TODO signalling guards
--
2.55.0