Skip to content

Commit

Permalink
dma-buf/sw_sync: force signal all unsignaled fences on dying timeline
Browse files Browse the repository at this point in the history
commit ea4d5a2 upstream.

To avoid hanging userspace components that might have been waiting on the
active fences of the destroyed timeline we need to signal with error all
remaining fences on such timeline.

This restore the default behaviour of the Android sw_sync framework, which
Android still relies on. It was broken on the dma fence conversion a few
years ago and never fixed.

v2: Do not bother with cleanup do the list (Chris Wilson)

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Dominik Behr <dbehr@chromium.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170907190246.16425-2-gustavo@padovan.org
[s/dma_fence/fence/g - gregkh]
Cc: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Dominik Behr authored and Greg Kroah-Hartman committed Dec 9, 2017
1 parent f5e0724 commit 424bdc5
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/dma-buf/sw_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,16 @@ static int sw_sync_debugfs_open(struct inode *inode, struct file *file)
static int sw_sync_debugfs_release(struct inode *inode, struct file *file)
{
struct sync_timeline *obj = file->private_data;
struct sync_pt *pt, *next;

spin_lock_irq(&obj->lock);

list_for_each_entry_safe(pt, next, &obj->pt_list, link) {
fence_set_error(&pt->base, -ENOENT);
fence_signal_locked(&pt->base);
}

smp_wmb();
spin_unlock_irq(&obj->lock);

sync_timeline_put(obj);
return 0;
Expand Down

0 comments on commit 424bdc5

Please sign in to comment.