Commit 952de419 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Kalle Valo

mt76: mt7663s: fix rx buffer refcounting

Similar to mt7601u driver, fix erroneous rx page refcounting

Fixes: a66cbdd6 ("mt76: mt7615: introduce mt7663s support")
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/dca19c9d445156201bc41f7cbb6e894bbc9a678c.1610644945.git.lorenzo@kernel.org
parent d24c7905
...@@ -83,7 +83,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid, ...@@ -83,7 +83,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
{ {
struct mt76_queue *q = &dev->q_rx[qid]; struct mt76_queue *q = &dev->q_rx[qid];
struct mt76_sdio *sdio = &dev->sdio; struct mt76_sdio *sdio = &dev->sdio;
int len = 0, err, i, order; int len = 0, err, i;
struct page *page; struct page *page;
u8 *buf; u8 *buf;
...@@ -96,8 +96,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid, ...@@ -96,8 +96,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
if (len > sdio->func->cur_blksize) if (len > sdio->func->cur_blksize)
len = roundup(len, sdio->func->cur_blksize); len = roundup(len, sdio->func->cur_blksize);
order = get_order(len); page = __dev_alloc_pages(GFP_KERNEL, get_order(len));
page = __dev_alloc_pages(GFP_KERNEL, order);
if (!page) if (!page)
return -ENOMEM; return -ENOMEM;
...@@ -106,7 +105,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid, ...@@ -106,7 +105,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
err = sdio_readsb(sdio->func, buf, MCR_WRDR(qid), len); err = sdio_readsb(sdio->func, buf, MCR_WRDR(qid), len);
if (err < 0) { if (err < 0) {
dev_err(dev->dev, "sdio read data failed:%d\n", err); dev_err(dev->dev, "sdio read data failed:%d\n", err);
__free_pages(page, order); put_page(page);
return err; return err;
} }
...@@ -123,7 +122,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid, ...@@ -123,7 +122,7 @@ static int mt7663s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
if (q->queued + i + 1 == q->ndesc) if (q->queued + i + 1 == q->ndesc)
break; break;
} }
__free_pages(page, order); put_page(page);
spin_lock_bh(&q->lock); spin_lock_bh(&q->lock);
q->head = (q->head + i) % q->ndesc; q->head = (q->head + i) % q->ndesc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment