kni: use netdev_alloc_skb
authorStephen Hemminger <stephen@networkplumber.org>
Mon, 24 Jun 2019 16:47:07 +0000 (09:47 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 15 Jul 2019 17:13:52 +0000 (19:13 +0200)
netdev_alloc_skb is optimized to any alignment or setup
of skb->dev that is required. The kernel has chosen to not pad
packets on x86 (for many years), because it is faster.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
kernel/linux/kni/kni_net.c

index c86337d..cce5e7e 100644 (file)
@@ -340,16 +340,13 @@ kni_net_rx_normal(struct kni_dev *kni)
                data_kva = kva2data_kva(kva);
                kni->va[i] = pa2va(kni->pa[i], kva);
 
-               skb = dev_alloc_skb(len + 2);
+               skb = netdev_alloc_skb(dev, len);
                if (!skb) {
                        /* Update statistics */
                        kni->stats.rx_dropped++;
                        continue;
                }
 
-               /* Align IP on 16B boundary */
-               skb_reserve(skb, 2);
-
                if (kva->nb_segs == 1) {
                        memcpy(skb_put(skb, len), data_kva, len);
                } else {
@@ -368,7 +365,6 @@ kni_net_rx_normal(struct kni_dev *kni)
                        }
                }
 
-               skb->dev = dev;
                skb->protocol = eth_type_trans(skb, dev);
                skb->ip_summed = CHECKSUM_UNNECESSARY;
 
@@ -512,26 +508,20 @@ kni_net_rx_lo_fifo_skb(struct kni_dev *kni)
                data_kva = kva2data_kva(kva);
                kni->va[i] = pa2va(kni->pa[i], kva);
 
-               skb = dev_alloc_skb(len + 2);
+               skb = netdev_alloc_skb(dev, len);
                if (skb) {
-                       /* Align IP on 16B boundary */
-                       skb_reserve(skb, 2);
                        memcpy(skb_put(skb, len), data_kva, len);
-                       skb->dev = dev;
                        skb->ip_summed = CHECKSUM_UNNECESSARY;
                        dev_kfree_skb(skb);
                }
 
                /* Simulate real usage, allocate/copy skb twice */
-               skb = dev_alloc_skb(len + 2);
+               skb = netdev_alloc_skb(dev, len);
                if (skb == NULL) {
                        kni->stats.rx_dropped++;
                        continue;
                }
 
-               /* Align IP on 16B boundary */
-               skb_reserve(skb, 2);
-
                if (kva->nb_segs == 1) {
                        memcpy(skb_put(skb, len), data_kva, len);
                } else {
@@ -550,7 +540,6 @@ kni_net_rx_lo_fifo_skb(struct kni_dev *kni)
                        }
                }
 
-               skb->dev = dev;
                skb->ip_summed = CHECKSUM_UNNECESSARY;
 
                kni->stats.rx_bytes += len;