diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2019-10-14 11:29:40 +0200 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2019-10-14 11:29:40 +0200 |
commit | f2fbbb0846d4d0737cd5bbf0e7a6a136f0334c5e (patch) | |
tree | bc8a63d51e366fb4d65f6547497e33ad3c3c4869 /drivers/dma-buf/sw_sync.c | |
parent | 73e1c506b9ffb348af15763d62b3677378bd8d91 (diff) | |
parent | a2fc8ee6676067f27d2f5c6e4d512adff3d9938c (diff) |
Merge tag 'v5.3.6' into toradex_5.3.y
This is the 5.3.6 stable release
Diffstat (limited to 'drivers/dma-buf/sw_sync.c')
-rw-r--r-- | drivers/dma-buf/sw_sync.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c index 051f6c2873c7..6713cfb1995c 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -132,17 +132,14 @@ static void timeline_fence_release(struct dma_fence *fence) { struct sync_pt *pt = dma_fence_to_sync_pt(fence); struct sync_timeline *parent = dma_fence_parent(fence); + unsigned long flags; + spin_lock_irqsave(fence->lock, flags); if (!list_empty(&pt->link)) { - unsigned long flags; - - spin_lock_irqsave(fence->lock, flags); - if (!list_empty(&pt->link)) { - list_del(&pt->link); - rb_erase(&pt->node, &parent->pt_tree); - } - spin_unlock_irqrestore(fence->lock, flags); + list_del(&pt->link); + rb_erase(&pt->node, &parent->pt_tree); } + spin_unlock_irqrestore(fence->lock, flags); sync_timeline_put(parent); dma_fence_free(fence); @@ -265,7 +262,8 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj, p = &parent->rb_left; } else { if (dma_fence_get_rcu(&other->base)) { - dma_fence_put(&pt->base); + sync_timeline_put(obj); + kfree(pt); pt = other; goto unlock; } |