From: Greg Kroah-Hartman Date: Thu, 7 Dec 2017 09:52:05 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v3.18.87~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7028015e3f3d82cc74da90929379f62e97545e0b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: dma-buf-sw_sync-force-signal-all-unsignaled-fences-on-dying-timeline.patch --- diff --git a/queue-4.14/dma-buf-sw_sync-force-signal-all-unsignaled-fences-on-dying-timeline.patch b/queue-4.14/dma-buf-sw_sync-force-signal-all-unsignaled-fences-on-dying-timeline.patch new file mode 100644 index 00000000000..d38c71df272 --- /dev/null +++ b/queue-4.14/dma-buf-sw_sync-force-signal-all-unsignaled-fences-on-dying-timeline.patch @@ -0,0 +1,50 @@ +From ea4d5a270b57fa8d4871f372ca9b97b7697fdfda Mon Sep 17 00:00:00 2001 +From: Dominik Behr +Date: Thu, 7 Sep 2017 16:02:46 -0300 +Subject: dma-buf/sw_sync: force signal all unsignaled fences on dying timeline + +From: Dominik Behr + +commit ea4d5a270b57fa8d4871f372ca9b97b7697fdfda 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 +Signed-off-by: Dominik Behr +Signed-off-by: Gustavo Padovan +Link: https://patchwork.freedesktop.org/patch/msgid/20170907190246.16425-2-gustavo@padovan.org +Cc: Jisheng Zhang +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/dma-buf/sw_sync.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/drivers/dma-buf/sw_sync.c ++++ b/drivers/dma-buf/sw_sync.c +@@ -321,8 +321,16 @@ static int sw_sync_debugfs_open(struct i + static int sw_sync_debugfs_release(struct inode *inode, struct file *file) + { + struct sync_timeline *obj = file->private_data; ++ struct sync_pt *pt, *next; + +- smp_wmb(); ++ spin_lock_irq(&obj->lock); ++ ++ list_for_each_entry_safe(pt, next, &obj->pt_list, link) { ++ dma_fence_set_error(&pt->base, -ENOENT); ++ dma_fence_signal_locked(&pt->base); ++ } ++ ++ spin_unlock_irq(&obj->lock); + + sync_timeline_put(obj); + return 0; diff --git a/queue-4.14/series b/queue-4.14/series index a6c7b35513a..020e67dca59 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -64,3 +64,4 @@ iio-multiplexer-add-null-check-on-devm_kzalloc-and-devm_kmemdup-return-values.pa locking-refcounts-x86-asm-enable-config_arch_has_refcount.patch powerpc-jprobes-disable-preemption-when-triggered-through-ftrace.patch powerpc-kprobes-disable-preemption-before-invoking-probe-handler-for-optprobes.patch +dma-buf-sw_sync-force-signal-all-unsignaled-fences-on-dying-timeline.patch