From 6693b0baa7d29c1de4f3b30cb0b75ee144230923 Mon Sep 17 00:00:00 2001 From: Tomasz Figa Date: Wed, 22 Feb 2017 18:23:05 +0900 Subject: [PATCH] staging: android/sync: Signal fences if timeline is destroyed The original implementation of sw_sync in 3.14 kernel signaled all active fences with error status on timeline release. However, after the conversion to use DMA-buf fence code under the hood, the behavior was (most likely by mistake) changed and the fences are being left active, with their users possibly getting stuck in sync_wait(). There is indeed a sign of this not being an intentional behavior change, as timeline retained its ->destroyed field, which is being set in sync_timeline_destroy(). However there is no code checking it anymore. Let's fix this by adding a check for timeline->destroyed in android_fence_signaled(), so if the fence is neither signaled nor in error state and timeline was destroyed, it will end up in -ENOENT error state. Change-Id: I0313b12b37e9d391d5caf218f381fa4b07a2a5e5 Signed-off-by: Tomasz Figa Git-commit: 85839014db07d3c675d5a8f2f9f94f2aeb33fc5e Git-repo: https://chromium.googlesource.com/chromiumos/third_party/kernel Signed-off-by: Firoz Khan --- drivers/staging/android/sync.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c index 5238d67490ce..39b99740a6d8 100644 --- a/drivers/staging/android/sync.c +++ b/drivers/staging/android/sync.c @@ -451,6 +451,8 @@ static bool android_fence_signaled(struct fence *fence) int ret; ret = parent->ops->has_signaled(pt); + if (!ret && parent->destroyed) + ret = -ENOENT; if (ret < 0) fence->status = ret; return ret;