To decouple the dma_fence_ops lifetime from dma_fences lifetime RCU support was added to said function, coupled with using the signaled bit to detect whether the fence_ops might be gone already.
When implementing that a wrong string was set as a default return parameter, indicating that every driver whose fence is already signalled must be detached, which is frankly wrong. Reported-by: Danilo Krummrich <[email protected]> Fixes: 506aa8b02a8d ("dma-fence: Add safe access helpers and document the rules") Signed-off-by: Philipp Stanner <[email protected]> --- When this was merged, it sadly slipped by me. I think this entire RCU mechanism was / is an overengineered idea. If we look at who actually uses dma_fence_driver_name() and dma_fence_timeline_name() – functions from which the largest share of the fence_ops vs. fence lifetime issue stems from – we discover that there is a single user: i915. Isn't that driver even deprecated? I think the better thing to do is: remove these functions alltogether, or at least deprecate them. Then the only lifetime issue left so solve is the callback functions. P. --- drivers/dma-buf/dma-fence.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 3f78c56b58dc..1875a0abebd3 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -1111,7 +1111,7 @@ const char __rcu *dma_fence_driver_name(struct dma_fence *fence) if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) return fence->ops->get_driver_name(fence); else - return "detached-driver"; + return "driver-whose-fence-is-already-signalled"; } EXPORT_SYMBOL(dma_fence_driver_name); -- 2.49.0
