[Intel-gfx] [PATCH 2/2] dma-buf/dma-fence: Add quick tests before dma_fence_remove_callback
Chris Wilson
chris at chris-wilson.co.uk
Wed Jul 15 10:49:05 UTC 2020
When waiting with a callback on the stack, we must remove the callback
upon wait completion. Since this will be notified by the fence signal
callback, the removal often contends with the fence->lock being held by
the signaler. We can look at the list entry to see if the callback was
already signaled before we take the contended lock.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/dma-buf/dma-fence.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
index 8d5bdfce638e..b910d7bc0854 100644
--- a/drivers/dma-buf/dma-fence.c
+++ b/drivers/dma-buf/dma-fence.c
@@ -420,6 +420,9 @@ dma_fence_remove_callback(struct dma_fence *fence, struct dma_fence_cb *cb)
unsigned long flags;
bool ret;
+ if (list_empty(&cb->node))
+ return false;
+
spin_lock_irqsave(fence->lock, flags);
ret = !list_empty(&cb->node);
--
2.20.1
More information about the Intel-gfx
mailing list