|
@@ -387,17 +387,21 @@ static int
|
|
|
mt76_dma_rx_poll(struct napi_struct *napi, int budget)
|
|
|
{
|
|
|
struct mt76_dev *dev;
|
|
|
- int qid, done;
|
|
|
+ int qid, done = 0, cur;
|
|
|
|
|
|
dev = container_of(napi->dev, struct mt76_dev, napi_dev);
|
|
|
qid = napi - dev->napi;
|
|
|
|
|
|
- done = mt76_dma_rx_process(dev, &dev->q_rx[qid], budget);
|
|
|
+ do {
|
|
|
+ cur = mt76_dma_rx_process(dev, &dev->q_rx[qid], budget - done);
|
|
|
+ mt76_rx_complete(dev, qid);
|
|
|
+ done += cur;
|
|
|
+ } while (cur && done < budget);
|
|
|
+
|
|
|
if (done < budget) {
|
|
|
napi_complete(napi);
|
|
|
dev->drv->rx_poll_complete(dev, qid);
|
|
|
}
|
|
|
- mt76_rx_complete(dev, qid);
|
|
|
|
|
|
return done;
|
|
|
}
|