mirror of https://github.com/OpenIPC/firmware.git
37 lines
1.0 KiB
Diff
37 lines
1.0 KiB
Diff
diff -drupN a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c
|
|
--- a/drivers/dma-buf/fence.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/drivers/dma-buf/fence.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -68,6 +68,8 @@ int fence_signal_locked(struct fence *fe
|
|
struct fence_cb *cur, *tmp;
|
|
int ret = 0;
|
|
|
|
+ lockdep_assert_held(fence->lock);
|
|
+
|
|
if (WARN_ON(!fence))
|
|
return -EINVAL;
|
|
|
|
@@ -159,9 +161,6 @@ fence_wait_timeout(struct fence *fence,
|
|
if (WARN_ON(timeout < 0))
|
|
return -EINVAL;
|
|
|
|
- if (timeout == 0)
|
|
- return fence_is_signaled(fence);
|
|
-
|
|
trace_fence_wait_start(fence);
|
|
ret = fence->ops->wait(fence, intr, timeout);
|
|
trace_fence_wait_end(fence);
|
|
@@ -329,8 +328,12 @@ fence_remove_callback(struct fence *fenc
|
|
spin_lock_irqsave(fence->lock, flags);
|
|
|
|
ret = !list_empty(&cb->node);
|
|
- if (ret)
|
|
+ if (ret) {
|
|
list_del_init(&cb->node);
|
|
+ if (list_empty(&fence->cb_list))
|
|
+ if (fence->ops->disable_signaling)
|
|
+ fence->ops->disable_signaling(fence);
|
|
+ }
|
|
|
|
spin_unlock_irqrestore(fence->lock, flags);
|
|
|