disp: msm: sde: add vblank mutex lock during irq unregister

Currently, during ctl reset in video mode, irq register or
unregister might result in race condition with vblank
enable/disable calls on event thread resulting in enable
cnt mismatch. This change adds mutex locks to avoid race
conditions in such cases.

Change-Id: I45aef19864475ac1b02dd8e84810eee233fc60ea
Signed-off-by: Yashwanth <yvulapu@codeaurora.org>
This commit is contained in:
Yashwanth 2020-11-17 18:37:53 +05:30
commit 91291bb9c4

View file

@ -924,6 +924,7 @@ static int sde_encoder_phys_vid_prepare_for_kickoff(
struct drm_connector *conn;
int event;
int rc;
int irq_enable;
if (!phys_enc || !params || !phys_enc->hw_ctl) {
SDE_ERROR("invalid encoder/parameters\n");
@ -952,12 +953,21 @@ static int sde_encoder_phys_vid_prepare_for_kickoff(
/* to avoid flooding, only log first time, and "dead" time */
if (vid_enc->error_count == 1) {
SDE_EVT32(DRMID(phys_enc->parent), SDE_EVTLOG_FATAL);
mutex_lock(phys_enc->vblank_ctl_lock);
sde_encoder_helper_unregister_irq(
irq_enable = atomic_read(&phys_enc->vblank_refcount);
if (irq_enable)
sde_encoder_helper_unregister_irq(
phys_enc, INTR_IDX_VSYNC);
SDE_DBG_DUMP("all", "dbg_bus", "vbif_dbg_bus");
sde_encoder_helper_register_irq(
if (irq_enable)
sde_encoder_helper_register_irq(
phys_enc, INTR_IDX_VSYNC);
mutex_unlock(phys_enc->vblank_ctl_lock);
}
/*