aboutsummaryrefslogtreecommitdiff
path: root/drivers/dma-buf
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@chromium.org>2015-09-08 17:30:52 -0700
committerTom Cherry <tomcherry@google.com>2015-11-06 14:24:30 -0800
commit54a9f8e5ac230b33d8b027b880476d73a4bf5026 (patch)
treeb11394a449048fc16622e573fd53723119384696 /drivers/dma-buf
parent8dd51538abd93e052b2dd235d9b3336827d17414 (diff)
CHROMIUM: android: fix warning when releasing active sync point
Userspace can close the sync device while there are still active fence points, in which case kernel produces the following warning: [ 43.853176] ------------[ cut here ]------------ [ 43.857834] WARNING: CPU: 0 PID: 892 at /mnt/host/source/src/third_party/kernel/v3.18/drivers/staging/android/sync.c:439 android_fence_release+0x88/0x104() [ 43.871741] CPU: 0 PID: 892 Comm: Binder_5 Tainted: G U 3.18.0-07661-g0550ce9 #1 [ 43.880176] Hardware name: Google Tegra210 Smaug Rev 1+ (DT) [ 43.885834] Call trace: [ 43.888294] [<ffffffc000207464>] dump_backtrace+0x0/0x10c [ 43.893697] [<ffffffc000207580>] show_stack+0x10/0x1c [ 43.898756] [<ffffffc000ab1258>] dump_stack+0x74/0xb8 [ 43.903814] [<ffffffc00021d414>] warn_slowpath_common+0x84/0xb0 [ 43.909736] [<ffffffc00021d530>] warn_slowpath_null+0x14/0x20 [ 43.915482] [<ffffffc00088aefc>] android_fence_release+0x84/0x104 [ 43.921582] [<ffffffc000671cc4>] fence_release+0x104/0x134 [ 43.927066] [<ffffffc00088b0cc>] sync_fence_free+0x74/0x9c [ 43.932552] [<ffffffc00088b128>] sync_fence_release+0x34/0x48 [ 43.938304] [<ffffffc000317bbc>] __fput+0x100/0x1b8 [ 43.943185] [<ffffffc000317cc8>] ____fput+0x8/0x14 [ 43.947982] [<ffffffc000237f38>] task_work_run+0xb0/0xe4 [ 43.953297] [<ffffffc000207074>] do_notify_resume+0x44/0x5c [ 43.958867] ---[ end trace 5a2aa4027cc5d171 ]--- Let's fix it by introducing a new optional callback (disable_signaling) to fence operations so that drivers can do proper clean ups when we remove last callback for given fence. BUG=chrome-os-partner:40303 TEST=Boot Smaug and observe that warning is gone. Change-Id: I05c34dcf74438c28405438c7ead0706b1f810fff Signed-off-by: Dmitry Torokhov <dtor@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/303409 Reviewed-by: Andrew Bresticker <abrestic@chromium.org>
Diffstat (limited to 'drivers/dma-buf')
-rw-r--r--drivers/dma-buf/fence.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c
index 7bb9d65d9a2c..ae50011fba3e 100644
--- a/drivers/dma-buf/fence.c
+++ b/drivers/dma-buf/fence.c
@@ -301,8 +301,12 @@ fence_remove_callback(struct fence *fence, struct fence_cb *cb)
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);