|
@@ -1969,32 +1969,15 @@ static int mvneta_poll(struct napi_struct *napi, int budget)
|
|
|
static int mvneta_rxq_fill(struct mvneta_port *pp, struct mvneta_rx_queue *rxq,
|
|
|
int num)
|
|
|
{
|
|
|
- struct net_device *dev = pp->dev;
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < num; i++) {
|
|
|
- struct sk_buff *skb;
|
|
|
- struct mvneta_rx_desc *rx_desc;
|
|
|
- unsigned long phys_addr;
|
|
|
-
|
|
|
- skb = dev_alloc_skb(pp->pkt_size);
|
|
|
- if (!skb) {
|
|
|
- netdev_err(dev, "%s:rxq %d, %d of %d buffs filled\n",
|
|
|
+ memset(rxq->descs + i, 0, sizeof(struct mvneta_rx_desc));
|
|
|
+ if (mvneta_rx_refill(pp, rxq->descs + i) != 0) {
|
|
|
+ netdev_err(pp->dev, "%s:rxq %d, %d of %d buffs filled\n",
|
|
|
__func__, rxq->id, i, num);
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
- rx_desc = rxq->descs + i;
|
|
|
- memset(rx_desc, 0, sizeof(struct mvneta_rx_desc));
|
|
|
- phys_addr = dma_map_single(dev->dev.parent, skb->head,
|
|
|
- MVNETA_RX_BUF_SIZE(pp->pkt_size),
|
|
|
- DMA_FROM_DEVICE);
|
|
|
- if (unlikely(dma_mapping_error(dev->dev.parent, phys_addr))) {
|
|
|
- dev_kfree_skb(skb);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- mvneta_rx_desc_fill(rx_desc, phys_addr, (u32)skb);
|
|
|
}
|
|
|
|
|
|
/* Add this number of RX descriptors as non occupied (ready to
|