diff options
Diffstat (limited to 'drivers/gpu/drm/drm_dp_mst_topology.c')
-rw-r--r-- | drivers/gpu/drm/drm_dp_mst_topology.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 27fbd79d0daf..e17fbdaf874b 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c | |||
@@ -1672,13 +1672,19 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr, | |||
1672 | u8 sinks[DRM_DP_MAX_SDP_STREAMS]; | 1672 | u8 sinks[DRM_DP_MAX_SDP_STREAMS]; |
1673 | int i; | 1673 | int i; |
1674 | 1674 | ||
1675 | port = drm_dp_get_validated_port_ref(mgr, port); | ||
1676 | if (!port) | ||
1677 | return -EINVAL; | ||
1678 | |||
1675 | port_num = port->port_num; | 1679 | port_num = port->port_num; |
1676 | mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent); | 1680 | mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent); |
1677 | if (!mstb) { | 1681 | if (!mstb) { |
1678 | mstb = drm_dp_get_last_connected_port_and_mstb(mgr, port->parent, &port_num); | 1682 | mstb = drm_dp_get_last_connected_port_and_mstb(mgr, port->parent, &port_num); |
1679 | 1683 | ||
1680 | if (!mstb) | 1684 | if (!mstb) { |
1685 | drm_dp_put_port(port); | ||
1681 | return -EINVAL; | 1686 | return -EINVAL; |
1687 | } | ||
1682 | } | 1688 | } |
1683 | 1689 | ||
1684 | txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL); | 1690 | txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL); |
@@ -1707,6 +1713,7 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr, | |||
1707 | kfree(txmsg); | 1713 | kfree(txmsg); |
1708 | fail_put: | 1714 | fail_put: |
1709 | drm_dp_put_mst_branch_device(mstb); | 1715 | drm_dp_put_mst_branch_device(mstb); |
1716 | drm_dp_put_port(port); | ||
1710 | return ret; | 1717 | return ret; |
1711 | } | 1718 | } |
1712 | 1719 | ||