mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
fix freeing frames on tx
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -91,6 +91,7 @@ int mt76_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
||||
struct sk_buff *skb, struct mt76_wcid *wcid,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct mt76_queue_entry e;
|
||||
struct mt76_txwi_cache *t;
|
||||
struct mt76_queue_buf buf[32];
|
||||
struct sk_buff *iter;
|
||||
@@ -101,8 +102,8 @@ int mt76_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
||||
|
||||
t = mt76_get_txwi(dev);
|
||||
if (!t) {
|
||||
ret = -ENOMEM;
|
||||
goto free;
|
||||
ieee80211_free_txskb(dev->hw, skb);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
dma_sync_single_for_cpu(dev->dev, t->dma_addr, sizeof(t->txwi),
|
||||
@@ -112,13 +113,13 @@ int mt76_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
||||
dma_sync_single_for_device(dev->dev, t->dma_addr, sizeof(t->txwi),
|
||||
DMA_TO_DEVICE);
|
||||
if (ret < 0)
|
||||
goto free_txwi;
|
||||
goto free;
|
||||
|
||||
len = skb->len - skb->data_len;
|
||||
addr = dma_map_single(dev->dev, skb->data, len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(dev->dev, addr)) {
|
||||
ret = -ENOMEM;
|
||||
goto free_txwi;
|
||||
goto free;
|
||||
}
|
||||
|
||||
n = 0;
|
||||
@@ -149,10 +150,11 @@ unmap:
|
||||
for (n--; n > 0; n--)
|
||||
dma_unmap_single(dev->dev, buf[n].addr, buf[n].len, DMA_TO_DEVICE);
|
||||
|
||||
free_txwi:
|
||||
mt76_put_txwi(dev, t);
|
||||
free:
|
||||
ieee80211_free_txskb(dev->hw, skb);
|
||||
e.skb = skb;
|
||||
e.txwi = t;
|
||||
dev->drv->tx_complete_skb(dev, q, &e, true);
|
||||
mt76_put_txwi(dev, t);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_tx_queue_skb);
|
||||
|
||||
Reference in New Issue
Block a user