Loading drivers/net/virtio_net.c +21 −13 Original line number Diff line number Diff line Loading @@ -443,6 +443,22 @@ static unsigned int mergeable_ctx_to_truesize(void *mrg_ctx) return (unsigned long)mrg_ctx & ((1 << MRG_CTX_HEADER_SHIFT) - 1); } static struct sk_buff *virtnet_build_skb(void *buf, unsigned int buflen, unsigned int headroom, unsigned int len) { struct sk_buff *skb; skb = build_skb(buf, buflen); if (unlikely(!skb)) return NULL; skb_reserve(skb, headroom); skb_put(skb, len); return skb; } /* Called from bottom half context */ static struct sk_buff *page_to_skb(struct virtnet_info *vi, struct receive_queue *rq, Loading Loading @@ -476,13 +492,10 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, /* copy small packet so we can reuse these pages */ if (!NET_IP_ALIGN && len > GOOD_COPY_LEN && tailroom >= shinfo_size) { skb = build_skb(buf, truesize); skb = virtnet_build_skb(buf, truesize, p - buf, len); if (unlikely(!skb)) return NULL; skb_reserve(skb, p - buf); skb_put(skb, len); page = (struct page *)page->private; if (page) give_pages(rq, page); Loading Loading @@ -946,13 +959,10 @@ static struct sk_buff *receive_small_build_skb(struct virtnet_info *vi, buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); skb = build_skb(buf, buflen); if (!skb) skb = virtnet_build_skb(buf, buflen, headroom, len); if (unlikely(!skb)) return NULL; skb_reserve(skb, headroom); skb_put(skb, len); buf += header_offset; memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len); Loading Loading @@ -1028,12 +1038,10 @@ static struct sk_buff *receive_small_xdp(struct net_device *dev, goto err_xdp; } skb = build_skb(buf, buflen); if (!skb) skb = virtnet_build_skb(buf, buflen, xdp.data - buf, len); if (unlikely(!skb)) goto err; skb_reserve(skb, xdp.data - buf); skb_put(skb, len); if (metasize) skb_metadata_set(skb, metasize); Loading Loading
drivers/net/virtio_net.c +21 −13 Original line number Diff line number Diff line Loading @@ -443,6 +443,22 @@ static unsigned int mergeable_ctx_to_truesize(void *mrg_ctx) return (unsigned long)mrg_ctx & ((1 << MRG_CTX_HEADER_SHIFT) - 1); } static struct sk_buff *virtnet_build_skb(void *buf, unsigned int buflen, unsigned int headroom, unsigned int len) { struct sk_buff *skb; skb = build_skb(buf, buflen); if (unlikely(!skb)) return NULL; skb_reserve(skb, headroom); skb_put(skb, len); return skb; } /* Called from bottom half context */ static struct sk_buff *page_to_skb(struct virtnet_info *vi, struct receive_queue *rq, Loading Loading @@ -476,13 +492,10 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, /* copy small packet so we can reuse these pages */ if (!NET_IP_ALIGN && len > GOOD_COPY_LEN && tailroom >= shinfo_size) { skb = build_skb(buf, truesize); skb = virtnet_build_skb(buf, truesize, p - buf, len); if (unlikely(!skb)) return NULL; skb_reserve(skb, p - buf); skb_put(skb, len); page = (struct page *)page->private; if (page) give_pages(rq, page); Loading Loading @@ -946,13 +959,10 @@ static struct sk_buff *receive_small_build_skb(struct virtnet_info *vi, buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); skb = build_skb(buf, buflen); if (!skb) skb = virtnet_build_skb(buf, buflen, headroom, len); if (unlikely(!skb)) return NULL; skb_reserve(skb, headroom); skb_put(skb, len); buf += header_offset; memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len); Loading Loading @@ -1028,12 +1038,10 @@ static struct sk_buff *receive_small_xdp(struct net_device *dev, goto err_xdp; } skb = build_skb(buf, buflen); if (!skb) skb = virtnet_build_skb(buf, buflen, xdp.data - buf, len); if (unlikely(!skb)) goto err; skb_reserve(skb, xdp.data - buf); skb_put(skb, len); if (metasize) skb_metadata_set(skb, metasize); Loading