|
@@ -1493,11 +1493,8 @@ static void process_single_down_tx_qlock(struct drm_dp_mst_topology_mgr *mgr)
|
|
|
WARN_ON(!mutex_is_locked(&mgr->qlock));
|
|
|
|
|
|
/* construct a chunk from the first msg in the tx_msg queue */
|
|
|
- if (list_empty(&mgr->tx_msg_downq)) {
|
|
|
- mgr->tx_down_in_progress = false;
|
|
|
+ if (list_empty(&mgr->tx_msg_downq))
|
|
|
return;
|
|
|
- }
|
|
|
- mgr->tx_down_in_progress = true;
|
|
|
|
|
|
txmsg = list_first_entry(&mgr->tx_msg_downq, struct drm_dp_sideband_msg_tx, next);
|
|
|
ret = process_single_tx_qlock(mgr, txmsg, false);
|
|
@@ -1512,10 +1509,6 @@ static void process_single_down_tx_qlock(struct drm_dp_mst_topology_mgr *mgr)
|
|
|
txmsg->state = DRM_DP_SIDEBAND_TX_TIMEOUT;
|
|
|
wake_up(&mgr->tx_waitq);
|
|
|
}
|
|
|
- if (list_empty(&mgr->tx_msg_downq)) {
|
|
|
- mgr->tx_down_in_progress = false;
|
|
|
- return;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/* called holding qlock */
|
|
@@ -1538,7 +1531,7 @@ static void drm_dp_queue_down_tx(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
{
|
|
|
mutex_lock(&mgr->qlock);
|
|
|
list_add_tail(&txmsg->next, &mgr->tx_msg_downq);
|
|
|
- if (!mgr->tx_down_in_progress)
|
|
|
+ if (list_is_singular(&mgr->tx_msg_downq))
|
|
|
process_single_down_tx_qlock(mgr);
|
|
|
mutex_unlock(&mgr->qlock);
|
|
|
}
|
|
@@ -2887,7 +2880,7 @@ static void drm_dp_tx_work(struct work_struct *work)
|
|
|
struct drm_dp_mst_topology_mgr *mgr = container_of(work, struct drm_dp_mst_topology_mgr, tx_work);
|
|
|
|
|
|
mutex_lock(&mgr->qlock);
|
|
|
- if (mgr->tx_down_in_progress)
|
|
|
+ if (!list_empty(&mgr->tx_msg_downq))
|
|
|
process_single_down_tx_qlock(mgr);
|
|
|
mutex_unlock(&mgr->qlock);
|
|
|
}
|