mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
Merge branch 'net-few-critical-helpers-are-inlined-again'
Eric Dumazet says: ==================== net: few critical helpers are inlined again Recent devmem additions increased stack depth. Some helpers that were inlined in the past are now out-of-line. ==================== Link: https://patch.msgid.link/20260122045720.1221017-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
a113a8ac50
|
|
@ -15,7 +15,7 @@
|
|||
*
|
||||
* Takes an additional reference on the paged fragment @frag.
|
||||
*/
|
||||
static inline void __skb_frag_ref(skb_frag_t *frag)
|
||||
static __always_inline void __skb_frag_ref(skb_frag_t *frag)
|
||||
{
|
||||
get_netmem(skb_frag_netmem(frag));
|
||||
}
|
||||
|
|
@ -27,14 +27,14 @@ static inline void __skb_frag_ref(skb_frag_t *frag)
|
|||
*
|
||||
* Takes an additional reference on the @f'th paged fragment of @skb.
|
||||
*/
|
||||
static inline void skb_frag_ref(struct sk_buff *skb, int f)
|
||||
static __always_inline void skb_frag_ref(struct sk_buff *skb, int f)
|
||||
{
|
||||
__skb_frag_ref(&skb_shinfo(skb)->frags[f]);
|
||||
}
|
||||
|
||||
bool napi_pp_put_page(netmem_ref netmem);
|
||||
|
||||
static inline void skb_page_unref(netmem_ref netmem, bool recycle)
|
||||
static __always_inline void skb_page_unref(netmem_ref netmem, bool recycle)
|
||||
{
|
||||
#ifdef CONFIG_PAGE_POOL
|
||||
if (recycle && napi_pp_put_page(netmem))
|
||||
|
|
@ -51,7 +51,7 @@ static inline void skb_page_unref(netmem_ref netmem, bool recycle)
|
|||
* 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)
|
||||
static __always_inline void __skb_frag_unref(skb_frag_t *frag, bool recycle)
|
||||
{
|
||||
skb_page_unref(skb_frag_netmem(frag), recycle);
|
||||
}
|
||||
|
|
@ -63,7 +63,7 @@ static inline void __skb_frag_unref(skb_frag_t *frag, bool recycle)
|
|||
*
|
||||
* Releases a reference on the @f'th paged fragment of @skb.
|
||||
*/
|
||||
static inline void skb_frag_unref(struct sk_buff *skb, int f)
|
||||
static __always_inline void skb_frag_unref(struct sk_buff *skb, int f)
|
||||
{
|
||||
struct skb_shared_info *shinfo = skb_shinfo(skb);
|
||||
|
||||
|
|
|
|||
|
|
@ -389,8 +389,36 @@ static inline unsigned long netmem_get_dma_addr(netmem_ref netmem)
|
|||
return netmem_to_nmdesc(netmem)->dma_addr;
|
||||
}
|
||||
|
||||
void get_netmem(netmem_ref netmem);
|
||||
void put_netmem(netmem_ref netmem);
|
||||
#if defined(CONFIG_NET_DEVMEM)
|
||||
static inline bool net_is_devmem_iov(const struct net_iov *niov)
|
||||
{
|
||||
return niov->type == NET_IOV_DMABUF;
|
||||
}
|
||||
#else
|
||||
static inline bool net_is_devmem_iov(const struct net_iov *niov)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
void __get_netmem(netmem_ref netmem);
|
||||
void __put_netmem(netmem_ref netmem);
|
||||
|
||||
static __always_inline void get_netmem(netmem_ref netmem)
|
||||
{
|
||||
if (netmem_is_net_iov(netmem))
|
||||
__get_netmem(netmem);
|
||||
else
|
||||
get_page(netmem_to_page(netmem));
|
||||
}
|
||||
|
||||
static __always_inline void put_netmem(netmem_ref netmem)
|
||||
{
|
||||
if (netmem_is_net_iov(netmem))
|
||||
__put_netmem(netmem);
|
||||
else
|
||||
put_page(netmem_to_page(netmem));
|
||||
}
|
||||
|
||||
#define netmem_dma_unmap_addr_set(NETMEM, PTR, ADDR_NAME, VAL) \
|
||||
do { \
|
||||
|
|
|
|||
|
|
@ -30,11 +30,6 @@ static DEFINE_XARRAY_FLAGS(net_devmem_dmabuf_bindings, XA_FLAGS_ALLOC1);
|
|||
|
||||
static const struct memory_provider_ops dmabuf_devmem_ops;
|
||||
|
||||
bool net_is_devmem_iov(struct net_iov *niov)
|
||||
{
|
||||
return niov->type == NET_IOV_DMABUF;
|
||||
}
|
||||
|
||||
static void net_devmem_dmabuf_free_chunk_owner(struct gen_pool *genpool,
|
||||
struct gen_pool_chunk *chunk,
|
||||
void *not_used)
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ struct net_iov *
|
|||
net_devmem_alloc_dmabuf(struct net_devmem_dmabuf_binding *binding);
|
||||
void net_devmem_free_dmabuf(struct net_iov *ppiov);
|
||||
|
||||
bool net_is_devmem_iov(struct net_iov *niov);
|
||||
|
||||
struct net_devmem_dmabuf_binding *
|
||||
net_devmem_get_binding(struct sock *sk, unsigned int dmabuf_id);
|
||||
struct net_iov *
|
||||
|
|
@ -214,11 +214,6 @@ static inline u32 net_devmem_iov_binding_id(const struct net_iov *niov)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline bool net_is_devmem_iov(struct net_iov *niov)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline struct net_devmem_dmabuf_binding *
|
||||
net_devmem_get_binding(struct sock *sk, unsigned int dmabuf_id)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -415,7 +415,7 @@ static void gro_pull_from_frag0(struct sk_buff *skb, int grow)
|
|||
{
|
||||
struct skb_shared_info *pinfo = skb_shinfo(skb);
|
||||
|
||||
BUG_ON(skb->end - skb->tail < grow);
|
||||
DEBUG_NET_WARN_ON_ONCE(skb->end - skb->tail < grow);
|
||||
|
||||
memcpy(skb_tail_pointer(skb), NAPI_GRO_CB(skb)->frag0, grow);
|
||||
|
||||
|
|
|
|||
|
|
@ -7423,31 +7423,20 @@ bool csum_and_copy_from_iter_full(void *addr, size_t bytes,
|
|||
}
|
||||
EXPORT_SYMBOL(csum_and_copy_from_iter_full);
|
||||
|
||||
void get_netmem(netmem_ref netmem)
|
||||
void __get_netmem(netmem_ref netmem)
|
||||
{
|
||||
struct net_iov *niov;
|
||||
struct net_iov *niov = netmem_to_net_iov(netmem);
|
||||
|
||||
if (netmem_is_net_iov(netmem)) {
|
||||
niov = netmem_to_net_iov(netmem);
|
||||
if (net_is_devmem_iov(niov))
|
||||
net_devmem_get_net_iov(netmem_to_net_iov(netmem));
|
||||
return;
|
||||
}
|
||||
get_page(netmem_to_page(netmem));
|
||||
if (net_is_devmem_iov(niov))
|
||||
net_devmem_get_net_iov(netmem_to_net_iov(netmem));
|
||||
}
|
||||
EXPORT_SYMBOL(get_netmem);
|
||||
EXPORT_SYMBOL(__get_netmem);
|
||||
|
||||
void put_netmem(netmem_ref netmem)
|
||||
void __put_netmem(netmem_ref netmem)
|
||||
{
|
||||
struct net_iov *niov;
|
||||
struct net_iov *niov = netmem_to_net_iov(netmem);
|
||||
|
||||
if (netmem_is_net_iov(netmem)) {
|
||||
niov = netmem_to_net_iov(netmem);
|
||||
if (net_is_devmem_iov(niov))
|
||||
net_devmem_put_net_iov(netmem_to_net_iov(netmem));
|
||||
return;
|
||||
}
|
||||
|
||||
put_page(netmem_to_page(netmem));
|
||||
if (net_is_devmem_iov(niov))
|
||||
net_devmem_put_net_iov(netmem_to_net_iov(netmem));
|
||||
}
|
||||
EXPORT_SYMBOL(put_netmem);
|
||||
EXPORT_SYMBOL(__put_netmem);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user