Commit e181d710 authored by Dave Airlie's avatar Dave Airlie Committed by Kamal Mostafa

drm/dp/mst: take lock around looking up the branch device on hpd irq

commit 9eb1e57f upstream.

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: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
parent 0c823785
...@@ -1159,6 +1159,8 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ ...@@ -1159,6 +1159,8 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
struct drm_dp_mst_port *port; struct drm_dp_mst_port *port;
int i; int i;
/* find the port by iterating down */ /* find the port by iterating down */
mutex_lock(&mgr->lock);
mstb = mgr->mst_primary; mstb = mgr->mst_primary;
for (i = 0; i < lct - 1; i++) { for (i = 0; i < lct - 1; i++) {
...@@ -1178,6 +1180,7 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ ...@@ -1178,6 +1180,7 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
} }
} }
kref_get(&mstb->kref); kref_get(&mstb->kref);
mutex_unlock(&mgr->lock);
return mstb; return mstb;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment