void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q, struct napi_struct *napi) { struct sk_buff_head frames; struct sk_buff *skb; __skb_queue_head_init(&frames); while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL) { mt76_check_sta(dev, skb); mt76_rx_aggr_reorder(skb, &frames); } mt76_rx_complete(dev, &frames, napi); }
static int mt76_dma_rx_poll(struct napi_struct *napi, int budget) { struct mt76_dev *dev; int qid, done; 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); if (done < budget) { napi_complete(napi); dev->drv->rx_poll_complete(dev, qid); } mt76_rx_complete(dev, qid); return done; }