aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/pktgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/pktgen.c')
-rw-r--r--net/core/pktgen.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index bbd118b19aef..5219a9e2127a 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -2286,7 +2286,7 @@ out:
2286 2286
2287static inline void set_pkt_overhead(struct pktgen_dev *pkt_dev) 2287static inline void set_pkt_overhead(struct pktgen_dev *pkt_dev)
2288{ 2288{
2289 pkt_dev->pkt_overhead = LL_RESERVED_SPACE(pkt_dev->odev); 2289 pkt_dev->pkt_overhead = 0;
2290 pkt_dev->pkt_overhead += pkt_dev->nr_labels*sizeof(u32); 2290 pkt_dev->pkt_overhead += pkt_dev->nr_labels*sizeof(u32);
2291 pkt_dev->pkt_overhead += VLAN_TAG_SIZE(pkt_dev); 2291 pkt_dev->pkt_overhead += VLAN_TAG_SIZE(pkt_dev);
2292 pkt_dev->pkt_overhead += SVLAN_TAG_SIZE(pkt_dev); 2292 pkt_dev->pkt_overhead += SVLAN_TAG_SIZE(pkt_dev);
@@ -2777,13 +2777,13 @@ static void pktgen_finalize_skb(struct pktgen_dev *pkt_dev, struct sk_buff *skb,
2777} 2777}
2778 2778
2779static struct sk_buff *pktgen_alloc_skb(struct net_device *dev, 2779static struct sk_buff *pktgen_alloc_skb(struct net_device *dev,
2780 struct pktgen_dev *pkt_dev, 2780 struct pktgen_dev *pkt_dev)
2781 unsigned int extralen)
2782{ 2781{
2782 unsigned int extralen = LL_RESERVED_SPACE(dev);
2783 struct sk_buff *skb = NULL; 2783 struct sk_buff *skb = NULL;
2784 unsigned int size = pkt_dev->cur_pkt_size + 64 + extralen + 2784 unsigned int size;
2785 pkt_dev->pkt_overhead;
2786 2785
2786 size = pkt_dev->cur_pkt_size + 64 + extralen + pkt_dev->pkt_overhead;
2787 if (pkt_dev->flags & F_NODE) { 2787 if (pkt_dev->flags & F_NODE) {
2788 int node = pkt_dev->node >= 0 ? pkt_dev->node : numa_node_id(); 2788 int node = pkt_dev->node >= 0 ? pkt_dev->node : numa_node_id();
2789 2789
@@ -2796,8 +2796,9 @@ static struct sk_buff *pktgen_alloc_skb(struct net_device *dev,
2796 skb = __netdev_alloc_skb(dev, size, GFP_NOWAIT); 2796 skb = __netdev_alloc_skb(dev, size, GFP_NOWAIT);
2797 } 2797 }
2798 2798
2799 /* the caller pre-fetches from skb->data and reserves for the mac hdr */
2799 if (likely(skb)) 2800 if (likely(skb))
2800 skb_reserve(skb, LL_RESERVED_SPACE(dev)); 2801 skb_reserve(skb, extralen - 16);
2801 2802
2802 return skb; 2803 return skb;
2803} 2804}
@@ -2830,16 +2831,14 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
2830 mod_cur_headers(pkt_dev); 2831 mod_cur_headers(pkt_dev);
2831 queue_map = pkt_dev->cur_queue_map; 2832 queue_map = pkt_dev->cur_queue_map;
2832 2833
2833 datalen = (odev->hard_header_len + 16) & ~0xf; 2834 skb = pktgen_alloc_skb(odev, pkt_dev);
2834
2835 skb = pktgen_alloc_skb(odev, pkt_dev, datalen);
2836 if (!skb) { 2835 if (!skb) {
2837 sprintf(pkt_dev->result, "No memory"); 2836 sprintf(pkt_dev->result, "No memory");
2838 return NULL; 2837 return NULL;
2839 } 2838 }
2840 2839
2841 prefetchw(skb->data); 2840 prefetchw(skb->data);
2842 skb_reserve(skb, datalen); 2841 skb_reserve(skb, 16);
2843 2842
2844 /* Reserve for ethernet and IP header */ 2843 /* Reserve for ethernet and IP header */
2845 eth = (__u8 *) skb_push(skb, 14); 2844 eth = (__u8 *) skb_push(skb, 14);
@@ -2959,7 +2958,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
2959 mod_cur_headers(pkt_dev); 2958 mod_cur_headers(pkt_dev);
2960 queue_map = pkt_dev->cur_queue_map; 2959 queue_map = pkt_dev->cur_queue_map;
2961 2960
2962 skb = pktgen_alloc_skb(odev, pkt_dev, 16); 2961 skb = pktgen_alloc_skb(odev, pkt_dev);
2963 if (!skb) { 2962 if (!skb) {
2964 sprintf(pkt_dev->result, "No memory"); 2963 sprintf(pkt_dev->result, "No memory");
2965 return NULL; 2964 return NULL;