disp: msm: sde: flush event thread work before vm transition

During VM transition there should be no pending crtc event
thread operations in progress to avoid any resource access
after vm release. Flush the event thread worker in prerelease
to ensure it.

Change-Id: I51d6c78a702235ee926c9ff6415c8d69f74b5929
Signed-off-by: Raviteja Tamatam <quic_travitej@quicinc.com>
This commit is contained in:
Raviteja Tamatam
2023-02-22 14:24:58 -08:00
parent 5176514114
commit b470c15742

View File

@@ -1383,11 +1383,13 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms,
{ {
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct drm_encoder *encoder; struct drm_encoder *encoder;
struct msm_drm_private *priv;
int rc = 0; int rc = 0;
crtc = sde_kms_vm_get_vm_crtc(state); crtc = sde_kms_vm_get_vm_crtc(state);
if (!crtc) if (!crtc)
return 0; return 0;
priv = sde_kms->dev->dev_private;
/* if vm_req is enabled, once CRTC on the commit is guaranteed */ /* if vm_req is enabled, once CRTC on the commit is guaranteed */
sde_kms_wait_for_frame_transfer_complete(&sde_kms->base, crtc); sde_kms_wait_for_frame_transfer_complete(&sde_kms->base, crtc);
@@ -1396,6 +1398,8 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms,
sde_kms_cancel_delayed_work(crtc); sde_kms_cancel_delayed_work(crtc);
kthread_flush_worker(&priv->event_thread[crtc->index].worker);
/* disable SDE encoder irq's */ /* disable SDE encoder irq's */
drm_for_each_encoder_mask(encoder, crtc->dev, drm_for_each_encoder_mask(encoder, crtc->dev,
crtc->state->encoder_mask) { crtc->state->encoder_mask) {