diff options
| author | Alan Kwong <akwong@codeaurora.org> | 2016-09-30 14:25:16 -0400 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-10-10 17:35:47 -0700 |
| commit | f02f23f17f82c10eacd5da289df1d76ef19e13df (patch) | |
| tree | 52d0b02393fb1fb5f5549eba5ad68d9c63e06f6f /drivers/gpu | |
| parent | 4edc9e778a83775d4ea8f15176d872bc6a8ec096 (diff) | |
drm/msm/sde: add mode config mutex lock for connector search
Connection enumeration is used by writeback device to find the
writeback connector. Using connector for_each macros requires
lock of mode config mutex. Add mutex protection for writeback
connector enumeration.
Change-Id: Ib299f1576cb17d30543daa00df95924b51bc862f
Signed-off-by: Alan Kwong <akwong@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c b/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c index 980dea5f3bfd..6e3d39d15d0f 100644 --- a/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c +++ b/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c @@ -781,15 +781,25 @@ static void sde_encoder_phys_wb_enable(struct sde_encoder_phys *phys_enc) { struct sde_encoder_phys_wb *wb_enc = to_sde_encoder_phys_wb(phys_enc); struct sde_hw_wb *hw_wb = wb_enc->hw_wb; + struct drm_device *dev; struct drm_connector *connector; SDE_DEBUG("[wb:%d]\n", hw_wb->idx - WB_0); + if (!wb_enc->base.parent || !wb_enc->base.parent->dev) { + SDE_ERROR("invalid drm device\n"); + return; + } + dev = wb_enc->base.parent->dev; + /* find associated writeback connector */ + mutex_lock(&dev->mode_config.mutex); drm_for_each_connector(connector, phys_enc->parent->dev) { if (connector->encoder == phys_enc->parent) break; } + mutex_unlock(&dev->mode_config.mutex); + if (!connector || connector->encoder != phys_enc->parent) { SDE_ERROR("failed to find writeback connector\n"); return; |
