Author: nbd
Date: 2016-01-31 13:35:20 +0100 (Sun, 31 Jan 2016)
New Revision: 48580

Modified:
   trunk/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c
Log:
cns3xxx: improve ethernet performance by using the page fragment allocation API

Signed-off-by: Felix Fietkau <[email protected]>

Modified: 
trunk/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c
===================================================================
--- trunk/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c  
2016-01-31 12:35:07 UTC (rev 48579)
+++ trunk/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c  
2016-01-31 12:35:20 UTC (rev 48580)
@@ -518,14 +518,14 @@
        unsigned int phys;
 
        for (received += rx_ring->alloc_count; received > 0; received--) {
-               buf = kmalloc(RX_SEGMENT_ALLOC_SIZE, GFP_ATOMIC);
+               buf = napi_alloc_frag(RX_SEGMENT_ALLOC_SIZE);
                if (!buf)
                        break;
 
                phys = dma_map_single(sw->dev, buf + SKB_HEAD_ALIGN,
                                      RX_SEGMENT_MRU, DMA_FROM_DEVICE);
                if (dma_mapping_error(sw->dev, phys)) {
-                       kfree(buf);
+                       skb_free_frag(buf);
                        break;
                }
 
@@ -636,7 +636,7 @@
                dma_unmap_single(sw->dev, rx_ring->phys_tab[i],
                                 RX_SEGMENT_MRU, DMA_FROM_DEVICE);
 
-               skb = build_skb(rx_ring->buff_tab[i], 0);
+               skb = build_skb(rx_ring->buff_tab[i], RX_SEGMENT_ALLOC_SIZE);
                if (!skb)
                        break;
 
@@ -907,7 +907,7 @@
                struct rx_desc *desc = &(rx_ring)->desc[i];
                void *buf;
 
-               buf = kzalloc(RX_SEGMENT_ALLOC_SIZE, GFP_KERNEL);
+               buf = netdev_alloc_frag(RX_SEGMENT_ALLOC_SIZE);
                if (!buf)
                        return -ENOMEM;
 
@@ -957,14 +957,14 @@
        for (i = 0; i < RX_DESCS; i++) {
                struct _rx_ring *rx_ring = &sw->rx_ring;
                struct rx_desc *desc = &(rx_ring)->desc[i];
-               struct sk_buff *skb = sw->rx_ring.buff_tab[i];
+               void *buf = sw->rx_ring.buff_tab[i];
 
-               if (!skb)
+               if (!buf)
                        continue;
 
                dma_unmap_single(sw->dev, desc->sdp, RX_SEGMENT_MRU,
                                 DMA_FROM_DEVICE);
-               dev_kfree_skb(skb);
+               skb_free_frag(buf);
        }
 
        for (i = 0; i < TX_DESCS; i++) {
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to