Commit 57b8b575 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau
Browse files

mt76: check return value of mt76_txq_send_burst in mt76_txq_schedule_list



Since mt76_txq_send_burst routine can report a negative error code,
check the returned value before incrementing the number of transmitted
frames in mt76_txq_schedule_list routine.
Return -EBUSY directly if the device is in reset or in power management.

Fixes: 90fdc171 ("mt76: use mac80211 txq scheduling")
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent c996f034
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -461,11 +461,11 @@ mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
	int ret = 0;

	while (1) {
		int n_frames = 0;

		if (test_bit(MT76_STATE_PM, &phy->state) ||
		    test_bit(MT76_RESET, &phy->state)) {
			ret = -EBUSY;
			break;
		}
		    test_bit(MT76_RESET, &phy->state))
			return -EBUSY;

		if (dev->queue_ops->tx_cleanup &&
		    q->queued + 2 * MT_TXQ_FREE_THR >= q->ndesc) {
@@ -497,11 +497,16 @@ mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
		}

		if (!mt76_txq_stopped(q))
			ret += mt76_txq_send_burst(phy, q, mtxq);
			n_frames = mt76_txq_send_burst(phy, q, mtxq);

		spin_unlock_bh(&q->lock);

		ieee80211_return_txq(phy->hw, txq, false);

		if (unlikely(n_frames < 0))
			return n_frames;

		ret += n_frames;
	}

	return ret;