diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c index 8df20b0218a9..6b37c52d4198 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -221,7 +221,11 @@ static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc) if (!timeline_fence_signaled(&pt->base)) break; - dma_fence_get(&pt->base); + if (!dma_fence_get_rcu(&pt->base)) { + list_del_init(&pt->link); + rb_erase(&pt->node, &obj->pt_tree); + continue; + } list_move_tail(&pt->link, &signalled); rb_erase(&pt->node, &obj->pt_tree);