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: Markus Theil <markus.theil@tu-ilmenau.de> Acked-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Родитель
924ea58dad
Коммит
05d6c8cfdb
|
@ -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
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче