On 6/16/25 17:59, Tvrtko Ursulin wrote:
> __rcu annotations on the return types from dma_fence_driver_name() and
> dma_fence_timeline_name() cause sparse to complain because both the
> constant signaled strings, and the strings return by the dma_fence_ops are
> not __rcu annotated.
> 
> For a simple fix it is easiest to cast them with __rcu added and undo the
> smarts from the tracpoints side of things. There is no functional change
> since the rest is left in place. Later we can consider changing the
> dma_fence_ops return types too, and handle all the individual drivers
> which define them.
> 
> Signed-off-by: Tvrtko Ursulin <[email protected]>
> Fixes: 506aa8b02a8d ("dma-fence: Add safe access helpers and document the 
> rules")
> Reported-by: kernel test robot <[email protected]>
> Closes: 
> https://lore.kernel.org/oe-kbuild-all/[email protected]/
> Cc: Christian König <[email protected]>

Sorry for the delayed reply, completed missed this one.

Patch is reviewed and pushed to drm-misc-next. It eventually will be backported 
to stable kernels because of the fixes tag, but since this is not a functional 
bug I didn't added a CC:stable tag.

Thanks,
Christian.

> ---
>  drivers/dma-buf/dma-fence.c      |  8 ++++----
>  include/trace/events/dma_fence.h | 35 +++++---------------------------
>  2 files changed, 9 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index 3f78c56b58dc..da60d4e68b89 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -1109,9 +1109,9 @@ const char __rcu *dma_fence_driver_name(struct 
> dma_fence *fence)
>                        "RCU protection is required for safe access to 
> returned string");
>  
>       if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
> -             return fence->ops->get_driver_name(fence);
> +             return (const char __rcu *)fence->ops->get_driver_name(fence);
>       else
> -             return "detached-driver";
> +             return (const char __rcu *)"detached-driver";
>  }
>  EXPORT_SYMBOL(dma_fence_driver_name);
>  
> @@ -1141,8 +1141,8 @@ const char __rcu *dma_fence_timeline_name(struct 
> dma_fence *fence)
>                        "RCU protection is required for safe access to 
> returned string");
>  
>       if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
> -             return fence->ops->get_driver_name(fence);
> +             return (const char __rcu *)fence->ops->get_driver_name(fence);
>       else
> -             return "signaled-timeline";
> +             return (const char __rcu *)"signaled-timeline";
>  }
>  EXPORT_SYMBOL(dma_fence_timeline_name);
> diff --git a/include/trace/events/dma_fence.h 
> b/include/trace/events/dma_fence.h
> index 4814a65b68dc..3abba45c0601 100644
> --- a/include/trace/events/dma_fence.h
> +++ b/include/trace/events/dma_fence.h
> @@ -9,37 +9,12 @@
>  
>  struct dma_fence;
>  
> -DECLARE_EVENT_CLASS(dma_fence,
> -
> -     TP_PROTO(struct dma_fence *fence),
> -
> -     TP_ARGS(fence),
> -
> -     TP_STRUCT__entry(
> -             __string(driver, dma_fence_driver_name(fence))
> -             __string(timeline, dma_fence_timeline_name(fence))
> -             __field(unsigned int, context)
> -             __field(unsigned int, seqno)
> -     ),
> -
> -     TP_fast_assign(
> -             __assign_str(driver);
> -             __assign_str(timeline);
> -             __entry->context = fence->context;
> -             __entry->seqno = fence->seqno;
> -     ),
> -
> -     TP_printk("driver=%s timeline=%s context=%u seqno=%u",
> -               __get_str(driver), __get_str(timeline), __entry->context,
> -               __entry->seqno)
> -);
> -
>  /*
>   * Safe only for call sites which are guaranteed to not race with fence
>   * signaling,holding the fence->lock and having checked for not signaled, or 
> the
>   * signaling path itself.
>   */
> -DECLARE_EVENT_CLASS(dma_fence_unsignaled,
> +DECLARE_EVENT_CLASS(dma_fence,
>  
>       TP_PROTO(struct dma_fence *fence),
>  
> @@ -64,14 +39,14 @@ DECLARE_EVENT_CLASS(dma_fence_unsignaled,
>                 __entry->seqno)
>  );
>  
> -DEFINE_EVENT(dma_fence_unsignaled, dma_fence_emit,
> +DEFINE_EVENT(dma_fence, dma_fence_emit,
>  
>       TP_PROTO(struct dma_fence *fence),
>  
>       TP_ARGS(fence)
>  );
>  
> -DEFINE_EVENT(dma_fence_unsignaled, dma_fence_init,
> +DEFINE_EVENT(dma_fence, dma_fence_init,
>  
>       TP_PROTO(struct dma_fence *fence),
>  
> @@ -85,14 +60,14 @@ DEFINE_EVENT(dma_fence, dma_fence_destroy,
>       TP_ARGS(fence)
>  );
>  
> -DEFINE_EVENT(dma_fence_unsignaled, dma_fence_enable_signal,
> +DEFINE_EVENT(dma_fence, dma_fence_enable_signal,
>  
>       TP_PROTO(struct dma_fence *fence),
>  
>       TP_ARGS(fence)
>  );
>  
> -DEFINE_EVENT(dma_fence_unsignaled, dma_fence_signaled,
> +DEFINE_EVENT(dma_fence, dma_fence_signaled,
>  
>       TP_PROTO(struct dma_fence *fence),
>  

Reply via email to