From: Russell King <rmk+ker...@arm.linux.org.uk>

We need to synchronously take down the hangcheck timer, and then cancel
the recovery work when we're unbinding the GPU to avoid these timers and
workers running after we clean up.

Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
---
 drivers/staging/etnaviv/etnaviv_gpu.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/etnaviv/etnaviv_gpu.c 
b/drivers/staging/etnaviv/etnaviv_gpu.c
index a5a47f34eba5..0547e93972e6 100644
--- a/drivers/staging/etnaviv/etnaviv_gpu.c
+++ b/drivers/staging/etnaviv/etnaviv_gpu.c
@@ -932,10 +932,12 @@ static void etnaviv_gpu_unbind(struct device *dev, struct 
device *master,
 {
        struct etnaviv_gpu *gpu = dev_get_drvdata(dev);

-       del_timer(&gpu->hangcheck_timer);
-
        DBG("%s", dev_name(gpu->dev));

+       /* Safely take down hangcheck */
+       del_timer_sync(&gpu->hangcheck_timer);
+       cancel_work_sync(&gpu->recover_work);
+
        WARN_ON(!list_empty(&gpu->active_list));

        if (gpu->buffer)
-- 
2.1.4

Reply via email to