diff options
author | Dave Airlie <airlied@redhat.com> | 2015-06-22 14:40:44 +1000 |
---|---|---|
committer | Sasha Levin <sasha.levin@oracle.com> | 2015-07-05 10:12:48 -0400 |
commit | c44ed568ae2ef49bb72d55c8a12e6ca19758b845 (patch) | |
tree | 9798fac99f92c5c8dd8cd3602b91b9b2631b88c6 /drivers/gpu | |
parent | 0e266aadab119ef07719c6ec92ed720027379bab (diff) | |
download | lwn-c44ed568ae2ef49bb72d55c8a12e6ca19758b845.tar.gz lwn-c44ed568ae2ef49bb72d55c8a12e6ca19758b845.zip |
drm/dp/mst: take lock around looking up the branch device on hpd irq
[ Upstream commit 9eb1e57f564d4e6e10991402726cc83fe0b9172f ]
If we are doing an MST transaction and we've gotten HPD and we
lookup the device from the incoming msg, we should take the mgr
lock around it, so that mst_primary and mstb->ports are valid.
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/drm_dp_mst_topology.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 34b19497b2e4..1f5e42a1f5b4 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -1152,6 +1152,8 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ struct drm_dp_mst_port *port; int i; /* find the port by iterating down */ + + mutex_lock(&mgr->lock); mstb = mgr->mst_primary; for (i = 0; i < lct - 1; i++) { @@ -1171,6 +1173,7 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ } } kref_get(&mstb->kref); + mutex_unlock(&mgr->lock); return mstb; } |