net: move skb ref helpers to new header
Add a new header, linux/skbuff_ref.h, which contains all the skb_*_ref() helpers. Many of the consumers of skbuff.h do not actually use any of the skb ref helpers, and we can speed up compilation a bit by minimizing this header file. Additionally in the later patch in the series we add page_pool support to skb_frag_ref(), which requires some page_pool dependencies. We can now add these dependencies to skbuff_ref.h instead of a very ubiquitous skbuff.h Signed-off-by: Mina Almasry <almasrymina@google.com> Link: https://lore.kernel.org/r/20240410190505.1225848-2-almasrymina@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
94426ed213
commit
f6d827b180
@ -10,6 +10,7 @@
|
||||
#include <net/ipv6.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <crypto/aes.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
#include "chcr_ktls.h"
|
||||
|
||||
static LIST_HEAD(uld_ctx_list);
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include <linux/mii.h>
|
||||
#include <linux/of_net.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include <net/ip.h>
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
|
@ -73,6 +73,7 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/random.h>
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <linux/ptr_ring.h>
|
||||
#include <linux/bpf_trace.h>
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
#include <net/page_pool/helpers.h>
|
||||
|
||||
#define DRV_NAME "veth"
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/udp.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include <net/tcp.h>
|
||||
|
||||
|
@ -3492,73 +3492,10 @@ static inline struct page *skb_frag_page(const skb_frag_t *frag)
|
||||
return netmem_to_page(frag->netmem);
|
||||
}
|
||||
|
||||
/**
|
||||
* __skb_frag_ref - take an addition reference on a paged fragment.
|
||||
* @frag: the paged fragment
|
||||
*
|
||||
* Takes an additional reference on the paged fragment @frag.
|
||||
*/
|
||||
static inline void __skb_frag_ref(skb_frag_t *frag)
|
||||
{
|
||||
get_page(skb_frag_page(frag));
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_frag_ref - take an addition reference on a paged fragment of an skb.
|
||||
* @skb: the buffer
|
||||
* @f: the fragment offset.
|
||||
*
|
||||
* Takes an additional reference on the @f'th paged fragment of @skb.
|
||||
*/
|
||||
static inline void skb_frag_ref(struct sk_buff *skb, int f)
|
||||
{
|
||||
__skb_frag_ref(&skb_shinfo(skb)->frags[f]);
|
||||
}
|
||||
|
||||
int skb_pp_cow_data(struct page_pool *pool, struct sk_buff **pskb,
|
||||
unsigned int headroom);
|
||||
int skb_cow_data_for_xdp(struct page_pool *pool, struct sk_buff **pskb,
|
||||
struct bpf_prog *prog);
|
||||
bool napi_pp_put_page(struct page *page);
|
||||
|
||||
static inline void
|
||||
skb_page_unref(struct page *page, bool recycle)
|
||||
{
|
||||
#ifdef CONFIG_PAGE_POOL
|
||||
if (recycle && napi_pp_put_page(page))
|
||||
return;
|
||||
#endif
|
||||
put_page(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* __skb_frag_unref - release a reference on a paged fragment.
|
||||
* @frag: the paged fragment
|
||||
* @recycle: recycle the page if allocated via page_pool
|
||||
*
|
||||
* Releases a reference on the paged fragment @frag
|
||||
* or recycles the page via the page_pool API.
|
||||
*/
|
||||
static inline void __skb_frag_unref(skb_frag_t *frag, bool recycle)
|
||||
{
|
||||
skb_page_unref(skb_frag_page(frag), recycle);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_frag_unref - release a reference on a paged fragment of an skb.
|
||||
* @skb: the buffer
|
||||
* @f: the fragment offset
|
||||
*
|
||||
* Releases a reference on the @f'th paged fragment of @skb.
|
||||
*/
|
||||
static inline void skb_frag_unref(struct sk_buff *skb, int f)
|
||||
{
|
||||
struct skb_shared_info *shinfo = skb_shinfo(skb);
|
||||
|
||||
if (!skb_zcopy_managed(skb))
|
||||
__skb_frag_unref(&shinfo->frags[f], skb->pp_recycle);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_frag_address - gets the address of the data contained in a paged fragment
|
||||
* @frag: the paged fragment buffer
|
||||
|
75
include/linux/skbuff_ref.h
Normal file
75
include/linux/skbuff_ref.h
Normal file
@ -0,0 +1,75 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Skb ref helpers.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_SKBUFF_REF_H
|
||||
#define _LINUX_SKBUFF_REF_H
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
/**
|
||||
* __skb_frag_ref - take an addition reference on a paged fragment.
|
||||
* @frag: the paged fragment
|
||||
*
|
||||
* Takes an additional reference on the paged fragment @frag.
|
||||
*/
|
||||
static inline void __skb_frag_ref(skb_frag_t *frag)
|
||||
{
|
||||
get_page(skb_frag_page(frag));
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_frag_ref - take an addition reference on a paged fragment of an skb.
|
||||
* @skb: the buffer
|
||||
* @f: the fragment offset.
|
||||
*
|
||||
* Takes an additional reference on the @f'th paged fragment of @skb.
|
||||
*/
|
||||
static inline void skb_frag_ref(struct sk_buff *skb, int f)
|
||||
{
|
||||
__skb_frag_ref(&skb_shinfo(skb)->frags[f]);
|
||||
}
|
||||
|
||||
bool napi_pp_put_page(struct page *page);
|
||||
|
||||
static inline void
|
||||
skb_page_unref(struct page *page, bool recycle)
|
||||
{
|
||||
#ifdef CONFIG_PAGE_POOL
|
||||
if (recycle && napi_pp_put_page(page))
|
||||
return;
|
||||
#endif
|
||||
put_page(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* __skb_frag_unref - release a reference on a paged fragment.
|
||||
* @frag: the paged fragment
|
||||
* @recycle: recycle the page if allocated via page_pool
|
||||
*
|
||||
* Releases a reference on the paged fragment @frag
|
||||
* or recycles the page via the page_pool API.
|
||||
*/
|
||||
static inline void __skb_frag_unref(skb_frag_t *frag, bool recycle)
|
||||
{
|
||||
skb_page_unref(skb_frag_page(frag), recycle);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_frag_unref - release a reference on a paged fragment of an skb.
|
||||
* @skb: the buffer
|
||||
* @f: the fragment offset
|
||||
*
|
||||
* Releases a reference on the @f'th paged fragment of @skb.
|
||||
*/
|
||||
static inline void skb_frag_unref(struct sk_buff *skb, int f)
|
||||
{
|
||||
struct skb_shared_info *shinfo = skb_shinfo(skb);
|
||||
|
||||
if (!skb_zcopy_managed(skb))
|
||||
__skb_frag_unref(&shinfo->frags[f], skb->pp_recycle);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_SKBUFF_REF_H */
|
@ -3,6 +3,7 @@
|
||||
#include <net/dst_metadata.h>
|
||||
#include <net/busy_poll.h>
|
||||
#include <trace/events/net.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#define MAX_GRO_SKBS 8
|
||||
|
||||
|
@ -51,6 +51,7 @@
|
||||
#endif
|
||||
#include <linux/string.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
#include <linux/splice.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <net/udp.h>
|
||||
#include <net/tcp.h>
|
||||
#include <net/espintcp.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include <linux/highmem.h>
|
||||
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/static_key.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include <trace/events/tcp.h>
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include <net/tcp.h>
|
||||
#include <net/espintcp.h>
|
||||
#include <net/inet6_hashtables.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include <linux/highmem.h>
|
||||
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include <net/inet_connection_sock.h>
|
||||
#include <net/tcp.h>
|
||||
#include <net/tls.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include "tls.h"
|
||||
#include "trace.h"
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include <crypto/aead.h>
|
||||
#include <crypto/scatterwalk.h>
|
||||
#include <net/ip6_checksum.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
|
||||
#include "tls.h"
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
/* Copyright (c) 2016 Tom Herbert <tom@herbertland.com> */
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/skbuff_ref.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <net/strparser.h>
|
||||
#include <net/tcp.h>
|
||||
|
Loading…
Reference in New Issue
Block a user