diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index 56e45ce5..6e0b51f5 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1379,11 +1379,13 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms, struct drm_crtc *crtc; struct drm_encoder *encoder; int rc = 0; + struct msm_drm_private *priv; crtc = sde_kms_vm_get_vm_crtc(state); 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); @@ -1405,6 +1407,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); }