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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user