From d847273f718897655bcc0b53436f34f224a36ce1 Mon Sep 17 00:00:00 2001 From: Yashwanth Date: Fri, 26 Mar 2021 12:35:17 +0530 Subject: [PATCH] disp: msm: sde: flush event thread workqueue before vm release In some cases while transitioning between vm, vblank work might be get executed on event thread after handoff is completed on commit thread leading to crash. This change flush the event thread queue during vm pre-release before lending the io resources to the other vm. Change-Id: I6a504fc2cec1c4985f7674bbca7fc5869bd8ad07 Signed-off-by: Yashwanth --- msm/sde/sde_kms.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index f3dfc261c374..747312fe524d 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1341,6 +1341,7 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms, struct drm_encoder *encoder; struct drm_connector *connector; int rc = 0; + struct msm_drm_private *priv; ddev = sde_kms->dev; @@ -1348,6 +1349,7 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms, if (!crtc) return 0; + priv = crtc->dev->dev_private; /* if vm_req is enabled, once CRTC on the commit is guaranteed */ sde_kms_wait_for_frame_transfer_complete(&sde_kms->base, crtc); @@ -1373,6 +1375,12 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms, /* disable vblank events */ drm_crtc_vblank_off(crtc); + /* + * Flush event thread queue for any pending events as vblank work + * might get scheduled from drm_crtc_vblank_off + */ + kthread_flush_worker(&priv->event_thread[crtc->index].worker); + /* reset sw state */ sde_crtc_reset_sw_state(crtc);