diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-04-20 15:50:42 +0200 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-04-20 15:50:42 +0200 |
| commit | aeb7d5ed8d98be6d0ea91cbb4b5ee8d52538a14e (patch) | |
| tree | c6e80cb1b238de972464ad36d5f1f85ee21d0271 /0002-CHROMIUM-android-fix-warning-when-releasing-active-s.patch | |
| parent | d330c5b27ba6318556007d16833bd7d3748723dc (diff) | |
| download | patches-aeb7d5ed8d98be6d0ea91cbb4b5ee8d52538a14e.tar.gz | |
goldfish patches
Diffstat (limited to '0002-CHROMIUM-android-fix-warning-when-releasing-active-s.patch')
| -rw-r--r-- | 0002-CHROMIUM-android-fix-warning-when-releasing-active-s.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/0002-CHROMIUM-android-fix-warning-when-releasing-active-s.patch b/0002-CHROMIUM-android-fix-warning-when-releasing-active-s.patch new file mode 100644 index 00000000000000..01b6e8dc2672ec --- /dev/null +++ b/0002-CHROMIUM-android-fix-warning-when-releasing-active-s.patch @@ -0,0 +1,76 @@ +From 384a2aaec210cc69d53cf9eec2cc7f15b10d7312 Mon Sep 17 00:00:00 2001 +From: Dmitry Torokhov <dtor@chromium.org> +Date: Tue, 8 Sep 2015 17:30:52 -0700 +Subject: [PATCH 2/3] 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. + +Signed-off-by: Dmitry Torokhov <dtor@chromium.org> +Reviewed-on: https://chromium-review.googlesource.com/303409 +Reviewed-by: Andrew Bresticker <abrestic@chromium.org> +Signed-off-by: Jin Qian <jinqian@android.com> +--- + drivers/dma-buf/dma-fence.c | 6 +++++- + include/linux/dma-fence.h | 2 ++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/dma-buf/dma-fence.c ++++ b/drivers/dma-buf/dma-fence.c +@@ -332,8 +332,12 @@ dma_fence_remove_callback(struct dma_fen + 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); + +--- a/include/linux/dma-fence.h ++++ b/include/linux/dma-fence.h +@@ -109,6 +109,7 @@ struct dma_fence_cb { + * @get_driver_name: returns the driver name. + * @get_timeline_name: return the name of the context this fence belongs to. + * @enable_signaling: enable software signaling of fence. ++ * @disable_signaling: disable software signaling of fence (optional). + * @signaled: [optional] peek whether the fence is signaled, can be null. + * @wait: custom wait implementation, or dma_fence_default_wait. + * @release: [optional] called on destruction of fence, can be null +@@ -168,6 +169,7 @@ struct dma_fence_ops { + const char * (*get_driver_name)(struct dma_fence *fence); + const char * (*get_timeline_name)(struct dma_fence *fence); + bool (*enable_signaling)(struct dma_fence *fence); ++ void (*disable_signaling)(struct dma_fence *fence); + bool (*signaled)(struct dma_fence *fence); + signed long (*wait)(struct dma_fence *fence, + bool intr, signed long timeout); |
