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: Ife1fea54dd236cc4cbca70f7636d27c4de1280ec
Signed-off-by: Andhavarapu Karthik <quic_kartkart@quicinc.com>
This commit is contained in:
Andhavarapu Karthik
2022-11-08 11:38:12 +05:30
committed by Gerrit - the friendly Code Review server
parent fba06e2000
commit 7f76bbaaa7

View File

@@ -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);
}