From 2d5ff8406ae5be3164ef12be791a6fd904f7ca01 Mon Sep 17 00:00:00 2001 From: Deepak Kumar Date: Thu, 27 Jul 2017 13:14:53 +0530 Subject: [PATCH] drm/msm: free the IRQ during GPU cleanup Free the IRQ in msm_gpu_cleanup. This is required to avoid failures from devm_request_irq on subsequent retries to load the GPU in case the previous attempt failed somewhere after successful call to devm_request_irq. Change-Id: I90d98199a1d7867e3f7b51f8e2293fa28e4612fa Signed-off-by: Deepak Kumar --- drivers/gpu/drm/msm/msm_gpu.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 8073898e4275..9320437e923d 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -897,6 +897,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev, ret = devm_request_irq(&pdev->dev, gpu->irq, irq_handler, IRQF_TRIGGER_HIGH, gpu->name, gpu); if (ret) { + gpu->irq = ret; dev_err(drm->dev, "failed to request IRQ%u: %d\n", gpu->irq, ret); goto fail; } @@ -1007,6 +1008,11 @@ void msm_gpu_cleanup(struct msm_gpu *gpu) WARN_ON(!list_empty(&gpu->active_list)); + if (gpu->irq >= 0) { + disable_irq(gpu->irq); + devm_free_irq(&pdev->dev, gpu->irq, gpu); + } + bs_fini(gpu); for (i = 0; i < ARRAY_SIZE(gpu->rb); i++)