Commit 05d6c8cf authored by Markus Theil's avatar Markus Theil Committed by Kalle Valo
Browse files

mt76: fix fix ampdu locking



The current ampdu locking code does not unlock its mutex in the early
return case. This patch fixes it.

Signed-off-by: default avatarMarkus Theil <markus.theil@tu-ilmenau.de>
Acked-by: default avatarFelix Fietkau <nbd@nbd.name>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 924ea58d
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -569,6 +569,7 @@ mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
	u16 ssn = params->ssn;
	u16 ssn = params->ssn;
	u8 ba_size = params->buf_size;
	u8 ba_size = params->buf_size;
	struct mt76_txq *mtxq;
	struct mt76_txq *mtxq;
	int ret = 0;


	if (!txq)
	if (!txq)
		return -EINVAL;
		return -EINVAL;
@@ -597,7 +598,8 @@ mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
		break;
		break;
	case IEEE80211_AMPDU_TX_START:
	case IEEE80211_AMPDU_TX_START:
		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
		break;
	case IEEE80211_AMPDU_TX_STOP_CONT:
	case IEEE80211_AMPDU_TX_STOP_CONT:
		mtxq->aggr = false;
		mtxq->aggr = false;
		mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
		mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
@@ -606,7 +608,7 @@ mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
	}
	}
	mutex_unlock(&dev->mt76.mutex);
	mutex_unlock(&dev->mt76.mutex);


	return 0;
	return ret;
}
}


static void
static void
+4 −2
Original line number Original line Diff line number Diff line
@@ -484,6 +484,7 @@ mt7615_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
	u16 tid = params->tid;
	u16 tid = params->tid;
	u16 ssn = params->ssn;
	u16 ssn = params->ssn;
	struct mt76_txq *mtxq;
	struct mt76_txq *mtxq;
	int ret = 0;


	if (!txq)
	if (!txq)
		return -EINVAL;
		return -EINVAL;
@@ -513,7 +514,8 @@ mt7615_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
		break;
		break;
	case IEEE80211_AMPDU_TX_START:
	case IEEE80211_AMPDU_TX_START:
		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
		break;
	case IEEE80211_AMPDU_TX_STOP_CONT:
	case IEEE80211_AMPDU_TX_STOP_CONT:
		mtxq->aggr = false;
		mtxq->aggr = false;
		mt7615_mcu_set_tx_ba(dev, params, 0);
		mt7615_mcu_set_tx_ba(dev, params, 0);
@@ -522,7 +524,7 @@ mt7615_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
	}
	}
	mutex_unlock(&dev->mt76.mutex);
	mutex_unlock(&dev->mt76.mutex);


	return 0;
	return ret;
}
}


const struct ieee80211_ops mt7615_ops = {
const struct ieee80211_ops mt7615_ops = {
+4 −2
Original line number Original line Diff line number Diff line
@@ -357,6 +357,7 @@ int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
	u16 tid = params->tid;
	u16 tid = params->tid;
	u16 ssn = params->ssn;
	u16 ssn = params->ssn;
	struct mt76_txq *mtxq;
	struct mt76_txq *mtxq;
	int ret = 0;


	if (!txq)
	if (!txq)
		return -EINVAL;
		return -EINVAL;
@@ -386,7 +387,8 @@ int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
		break;
		break;
	case IEEE80211_AMPDU_TX_START:
	case IEEE80211_AMPDU_TX_START:
		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
		break;
	case IEEE80211_AMPDU_TX_STOP_CONT:
	case IEEE80211_AMPDU_TX_STOP_CONT:
		mtxq->aggr = false;
		mtxq->aggr = false;
		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
@@ -394,7 +396,7 @@ int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
	}
	}
	mutex_unlock(&dev->mt76.mutex);
	mutex_unlock(&dev->mt76.mutex);


	return 0;
	return ret;
}
}
EXPORT_SYMBOL_GPL(mt76x02_ampdu_action);
EXPORT_SYMBOL_GPL(mt76x02_ampdu_action);