CHROMIUM: MALI: mali_kbase_vinstr: Use wait_event_interruptible
If there are no waiting_clients, waiting for a vinstr dump,
mali_vinstr_service would wait forever in its main loop, i.e.
wait_event is called, without starting a timer beforehand.
wait_event puts the task in TASK_UNINTERRUPTIBLE state (D state),
which ends up triggering a hung_task timeout.
Use wait_event_interruptible instead, which leaves the task
in TASK_INTERRUPTIBLE state. Even if a signal is received, the
loop would just run again, which should not cause any issues.
BUG=b:122057727
TEST=Boot kukui, no hung task timeout after ~247s.
Change-Id: Iec82d7a949251d2e61916e085ebd67ca815c2aac
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1392585
Reviewed-by: Anders Pedersen <anders.pedersen@arm.corp-partner.google.com>
diff --git a/drivers/gpu/arm/midgard/mali_kbase_vinstr.c b/drivers/gpu/arm/midgard/mali_kbase_vinstr.c
index df936cf..69d688a 100644
--- a/drivers/gpu/arm/midgard/mali_kbase_vinstr.c
+++ b/drivers/gpu/arm/midgard/mali_kbase_vinstr.c
@@ -1333,7 +1333,7 @@
ns_to_ktime(diff),
HRTIMER_MODE_REL);
}
- wait_event(
+ wait_event_interruptible(
vinstr_ctx->waitq,
atomic_read(
&vinstr_ctx->request_pending) ||