Contributors: 14
Author Tokens Token Proportion Commits Commit Proportion
Mina Almasry 113 62.09% 3 18.75%
Ilya Lesokhin 12 6.59% 1 6.25%
Ben Hutchings 12 6.59% 1 6.25%
Doron Roberts-Kedes 8 4.40% 1 6.25%
Jakub Kiciński 7 3.85% 1 6.25%
Alexander Lobakin 6 3.30% 1 6.25%
Linus Torvalds (pre-git) 6 3.30% 1 6.25%
Ian Campbell 5 2.75% 1 6.25%
Dimitris Michailidis 3 1.65% 1 6.25%
Steffen Klassert 3 1.65% 1 6.25%
Eric Dumazet 3 1.65% 1 6.25%
David S. Miller 2 1.10% 1 6.25%
Thomas Gleixner 1 0.55% 1 6.25%
Rusty Russell 1 0.55% 1 6.25%
Total 182 16


/* 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 */