summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAlan Kwong <akwong@codeaurora.org>2016-09-30 14:25:16 -0400
committerGerrit - the friendly Code Review server <code-review@localhost>2016-10-10 17:35:47 -0700
commitf02f23f17f82c10eacd5da289df1d76ef19e13df (patch)
tree52d0b02393fb1fb5f5549eba5ad68d9c63e06f6f /drivers/gpu
parent4edc9e778a83775d4ea8f15176d872bc6a8ec096 (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.c10
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;