From 568c9d2c97bb43869e4effff098c3db6f94787ca Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 19 Jun 2015 00:15:04 +1000 Subject: [PATCH] drm/dp: look up the mstb passed into work function We should validate the passed in mstb under the lock this should stop us getting an invalid mstb here. (first attempt with cancelling work has lockdep issues). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89366 Signed-off-by: Dave Airlie --- drivers/gpu/drm/drm_dp_mst_topology.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index fb65f5d..ad0d1bf 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -1198,9 +1198,14 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_ } static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *mgr, - struct drm_dp_mst_branch *mstb) + struct drm_dp_mst_branch *mstb_in) { struct drm_dp_mst_port *port; + struct drm_dp_mst_branch *mstb; + + mstb = drm_dp_get_validated_mstb_ref(mgr, mstb_in); + if (!mstb) + return; if (!mstb->link_address_sent) { drm_dp_send_link_address(mgr, mstb); @@ -1219,6 +1224,7 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m if (port->mstb) drm_dp_check_and_send_link_address(mgr, port->mstb); } + drm_dp_put_mst_branch_device(mstb); } static void drm_dp_mst_link_probe_work(struct work_struct *work) -- 2.4.1