]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/dp/mst: take lock around looking up the branch device on hpd irq
authorDave Airlie <airlied@redhat.com>
Mon, 22 Jun 2015 04:40:44 +0000 (14:40 +1000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 3 Aug 2015 16:29:08 +0000 (09:29 -0700)
commit 9eb1e57f564d4e6e10991402726cc83fe0b9172f 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: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/drm_dp_mst_topology.c

index c0069e8bb4bba5ec1cd1f9f026c7a503c0cf73c2..9dce953316244d51965276c1e3aacb2ede71c02d 100644 (file)
@@ -1171,6 +1171,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++) {
@@ -1190,6 +1192,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;
 }