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;
}