Re: [PATCH] drm/msm/disp/dpu1: set vbif hw config to NULL to avoid use after memory free during pm runtime resume

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 25/04/2022 06:26, Vinod Polimera wrote:
BUG: Unable to handle kernel paging request at virtual address 006b6b6b6b6b6be3

Call trace:
   dpu_vbif_init_memtypes+0x40/0xb8
   dpu_runtime_resume+0xcc/0x1c0
   pm_generic_runtime_resume+0x30/0x44
   __genpd_runtime_resume+0x68/0x7c
   genpd_runtime_resume+0x134/0x258
   __rpm_callback+0x98/0x138
   rpm_callback+0x30/0x88
   rpm_resume+0x36c/0x49c
   __pm_runtime_resume+0x80/0xb0
   dpu_core_irq_uninstall+0x30/0xb0
   dpu_irq_uninstall+0x18/0x24
   msm_drm_uninit+0xd8/0x16c

Fixes: 25fdd5933e4 ("drm/msm: Add SDM845 DPU support")
Signed-off-by: Vinod Polimera <quic_vpolimer@xxxxxxxxxxx>

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>

Let's merge this fix now. However I think that a proper solution would be to disable pm_runtime once we are in the uninit path.

---
  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 9c346ce..59982d3 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -793,8 +793,10 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
  		for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
  			u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
- if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx])
+			if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx]) {
  				dpu_hw_vbif_destroy(dpu_kms->hw_vbif[vbif_idx]);
+				dpu_kms->hw_vbif[vbif_idx] = NULL;
+			}
  		}
  	}


--
With best wishes
Dmitry



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux