Message ID | 20231129031201.32014-4-liangchen.linux@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | skbuff: Optimize SKB coalescing for page pool | expand |
On 2023/11/29 11:12, Liang Chen wrote: > Wrap code for checking if a page is a page_pool page into a > function for better readability and ease of reuse. > > Signed-off-by: Liang Chen <liangchen.linux@gmail.com> > --- > net/core/skbuff.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index b157efea5dea..310207389f51 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -890,6 +890,11 @@ static void skb_clone_fraglist(struct sk_buff *skb) > skb_get(list); > } > > +static inline bool skb_frag_is_pp_page(struct page *page) I am not sure about the 'skb_frag' part, But I am not able to come up with a better name too:) Also, Generally, 'inline' is not really encouraged in c file in the networking unless there is a clear justification as the compiler can make better decision about whether inlining most of the time. Other than the 'inlining' part, LGTM. Reviewed-by: Yunsheng Lin <linyunsheng@huawei.com> > +{ > + return (page->pp_magic & ~0x3UL) == PP_SIGNATURE; > +} > + > #if IS_ENABLED(CONFIG_PAGE_POOL) > bool napi_pp_put_page(struct page *page, bool napi_safe) > { > @@ -905,7 +910,7 @@ bool napi_pp_put_page(struct page *page, bool napi_safe) > * and page_is_pfmemalloc() is checked in __page_pool_put_page() > * to avoid recycling the pfmemalloc page. > */ > - if (unlikely((page->pp_magic & ~0x3UL) != PP_SIGNATURE)) > + if (unlikely(!skb_frag_is_pp_page(page))) > return false; > > pp = page->pp; >
On Wed, Nov 29, 2023 at 11:40 AM Yunsheng Lin <linyunsheng@huawei.com> wrote: > > On 2023/11/29 11:12, Liang Chen wrote: > > Wrap code for checking if a page is a page_pool page into a > > function for better readability and ease of reuse. > > > > Signed-off-by: Liang Chen <liangchen.linux@gmail.com> > > --- > > net/core/skbuff.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > > index b157efea5dea..310207389f51 100644 > > --- a/net/core/skbuff.c > > +++ b/net/core/skbuff.c > > @@ -890,6 +890,11 @@ static void skb_clone_fraglist(struct sk_buff *skb) > > skb_get(list); > > } > > > > +static inline bool skb_frag_is_pp_page(struct page *page) > > I am not sure about the 'skb_frag' part, But I am not able to come > up with a better name too:) > So, let's leave it there for now:) > Also, Generally, 'inline' is not really encouraged in c file in > the networking unless there is a clear justification as the compiler > can make better decision about whether inlining most of the time. > Sure. will remove 'inline' in v5. > Other than the 'inlining' part, LGTM. > Reviewed-by: Yunsheng Lin <linyunsheng@huawei.com> > > > +{ > > + return (page->pp_magic & ~0x3UL) == PP_SIGNATURE; > > +} > > + > > #if IS_ENABLED(CONFIG_PAGE_POOL) > > bool napi_pp_put_page(struct page *page, bool napi_safe) > > { > > @@ -905,7 +910,7 @@ bool napi_pp_put_page(struct page *page, bool napi_safe) > > * and page_is_pfmemalloc() is checked in __page_pool_put_page() > > * to avoid recycling the pfmemalloc page. > > */ > > - if (unlikely((page->pp_magic & ~0x3UL) != PP_SIGNATURE)) > > + if (unlikely(!skb_frag_is_pp_page(page))) > > return false; > > > > pp = page->pp; > >
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index b157efea5dea..310207389f51 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -890,6 +890,11 @@ static void skb_clone_fraglist(struct sk_buff *skb) skb_get(list); } +static inline bool skb_frag_is_pp_page(struct page *page) +{ + return (page->pp_magic & ~0x3UL) == PP_SIGNATURE; +} + #if IS_ENABLED(CONFIG_PAGE_POOL) bool napi_pp_put_page(struct page *page, bool napi_safe) { @@ -905,7 +910,7 @@ bool napi_pp_put_page(struct page *page, bool napi_safe) * and page_is_pfmemalloc() is checked in __page_pool_put_page() * to avoid recycling the pfmemalloc page. */ - if (unlikely((page->pp_magic & ~0x3UL) != PP_SIGNATURE)) + if (unlikely(!skb_frag_is_pp_page(page))) return false; pp = page->pp;
Wrap code for checking if a page is a page_pool page into a function for better readability and ease of reuse. Signed-off-by: Liang Chen <liangchen.linux@gmail.com> --- net/core/skbuff.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)