All of lore.kernel.org
 help / color / mirror / Atom feed
From: Byungchul Park <byungchul@sk.com>
To: Mina Almasry <almasrymina@google.com>
Cc: willy@infradead.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	kernel_team@skhynix.com, kuba@kernel.org,
	ilias.apalodimas@linaro.org, harry.yoo@oracle.com,
	hawk@kernel.org, akpm@linux-foundation.org, ast@kernel.org,
	daniel@iogearbox.net, davem@davemloft.net,
	john.fastabend@gmail.com, andrew+netdev@lunn.ch,
	edumazet@google.com, pabeni@redhat.com, vishal.moola@gmail.com
Subject: Re: [RFC 02/19] netmem: introduce netmem alloc/put API to wrap page alloc/put API
Date: Mon, 12 May 2025 21:30:51 +0900	[thread overview]
Message-ID: <20250512123051.GA45370@system.software.com> (raw)
In-Reply-To: <CAHS8izP3knY42632AcfTHcpgpSz49gP0j6CnyswUoHW6JtC3=w@mail.gmail.com>

On Fri, May 09, 2025 at 07:08:23AM -0700, Mina Almasry wrote:
> j
> 
> On Fri, May 9, 2025 at 6:39 AM Mina Almasry <almasrymina@google.com> wrote:
> >
> > On Fri, May 9, 2025 at 4:51 AM Byungchul Park <byungchul@sk.com> wrote:
> > >
> > > To eliminate the use of struct page in page pool, the page pool code
> > > should use netmem descriptor and API instead.
> > >
> > > As part of the work, introduce netmem alloc/put API allowing the code to
> > > use them rather than struct page things.
> > >
> > > Signed-off-by: Byungchul Park <byungchul@sk.com>
> > > ---
> > >  include/net/netmem.h | 18 ++++++++++++++++++
> > >  1 file changed, 18 insertions(+)
> > >
> > > diff --git a/include/net/netmem.h b/include/net/netmem.h
> > > index 45c209d6cc689..c87a604e980b9 100644
> > > --- a/include/net/netmem.h
> > > +++ b/include/net/netmem.h
> > > @@ -138,6 +138,24 @@ static inline netmem_ref page_to_netmem(struct page *page)
> > >         return (__force netmem_ref)page;
> > >  }
> > >
> > > +static inline netmem_ref alloc_netmems_node(int nid, gfp_t gfp_mask,
> > > +               unsigned int order)
> > > +{
> > > +       return page_to_netmem(alloc_pages_node(nid, gfp_mask, order));
> > > +}
> > > +
> > > +static inline unsigned long alloc_netmems_bulk_node(gfp_t gfp, int nid,
> > > +               unsigned long nr_netmems, netmem_ref *netmem_array)
> > > +{
> > > +       return alloc_pages_bulk_node(gfp, nid, nr_netmems,
> > > +                       (struct page **)netmem_array);
> > > +}
> > > +
> > > +static inline void put_netmem(netmem_ref netmem)
> > > +{
> > > +       put_page(netmem_to_page(netmem));
> > > +}
> >
> > We can't really do this. netmem_ref is an abstraction that can be a
> > struct page or struct net_iov underneath. We can't be sure when
> > put_netmem is called that it is safe to convert to a page via
> > netmem_to_page(). This will crash if put_netmem is called on a
> > netmem_ref that is a net_iov underneath.
> >
> 
> On a closer look, it looks like this put_netmem is only called from
> code paths where you are sure the netmem_ref is a page underneath, so
> this is likely fine for now. There is a net_next series that is adding
> proper put_netmem support [1]. It's probably best to rebase your work
> on top of that, but this should be fine in the meantime.

Indeed.  Hm..  It'd be the best to work on the top of yours.

If it takes too long, I keep working on as it is for now and will adjust
this patch later once your work gets merged.

	Byungchul

> [1] https://lore.kernel.org/netdev/20250508004830.4100853-1-almasrymina@google.com/
> 
> --
> Thanks,
> Mina

  reply	other threads:[~2025-05-12 12:30 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-09 11:51 [RFC 00/19] Split netmem from struct page Byungchul Park
2025-05-09 11:51 ` [RFC 01/19] netmem: rename struct net_iov to struct netmem_desc Byungchul Park
2025-05-12 13:11   ` Pavel Begunkov
2025-05-12 13:29     ` Byungchul Park
2025-05-12 19:14       ` Mina Almasry
2025-05-13  2:00         ` Byungchul Park
2025-05-13 12:58           ` Pavel Begunkov
2025-05-13 12:49       ` Pavel Begunkov
2025-05-14  0:07         ` Byungchul Park
2025-05-09 11:51 ` [RFC 02/19] netmem: introduce netmem alloc/put API to wrap page alloc/put API Byungchul Park
2025-05-09 13:39   ` Mina Almasry
2025-05-09 14:08     ` Mina Almasry
2025-05-12 12:30       ` Byungchul Park [this message]
2025-05-09 11:51 ` [RFC 03/19] page_pool: use netmem alloc/put API in __page_pool_alloc_page_order() Byungchul Park
2025-05-09 11:51 ` [RFC 04/19] page_pool: rename __page_pool_alloc_page_order() to __page_pool_alloc_large_netmem() Byungchul Park
2025-05-09 11:51 ` [RFC 05/19] page_pool: use netmem alloc/put API in __page_pool_alloc_pages_slow() Byungchul Park
2025-05-09 11:51 ` [RFC 06/19] page_pool: rename page_pool_return_page() to page_pool_return_netmem() Byungchul Park
2025-05-09 11:51 ` [RFC 07/19] page_pool: use netmem alloc/put API in page_pool_return_netmem() Byungchul Park
2025-05-09 11:51 ` [RFC 08/19] page_pool: rename __page_pool_release_page_dma() to __page_pool_release_netmem_dma() Byungchul Park
2025-05-09 11:51 ` [RFC 09/19] page_pool: rename __page_pool_put_page() to __page_pool_put_netmem() Byungchul Park
2025-05-09 11:51 ` [RFC 10/19] page_pool: rename __page_pool_alloc_pages_slow() to __page_pool_alloc_netmems_slow() Byungchul Park
2025-05-09 11:51 ` [RFC 11/19] mlx4: use netmem descriptor and API for page pool Byungchul Park
2025-05-09 11:51 ` [RFC 12/19] netmem: introduce page_pool_recycle_direct_netmem() Byungchul Park
2025-05-09 11:51 ` [RFC 13/19] page_pool: expand scope of is_pp_{netmem,page}() to global Byungchul Park
2025-05-10  3:29   ` kernel test robot
2025-05-12 12:46   ` Toke Høiland-Jørgensen
2025-05-12 12:55     ` Byungchul Park
2025-05-14  3:00     ` Byungchul Park
2025-05-14 11:17       ` Toke Høiland-Jørgensen
2025-05-09 11:51 ` [RFC 14/19] mm: page_alloc: do not directly access page->pp_magic but use is_pp_page() Byungchul Park
2025-05-09 11:51 ` [RFC 15/19] mlx5: use netmem descriptor and API for page pool Byungchul Park
2025-05-09 11:51 ` [RFC 16/19] netmem: use _Generic to cover const casting for page_to_netmem() Byungchul Park
2025-05-09 11:51 ` [RFC 17/19] netmem: remove __netmem_get_pp() Byungchul Park
2025-05-09 13:47   ` Mina Almasry
2025-05-09 11:51 ` [RFC 18/19] page_pool: make page_pool_get_dma_addr() just wrap page_pool_get_dma_addr_netmem() Byungchul Park
2025-05-09 13:49   ` Mina Almasry
2025-05-10  7:28   ` Ilias Apalodimas
2025-05-09 11:51 ` [RFC 19/19] mm, netmem: remove the page pool members in struct page Byungchul Park
2025-05-09 17:32   ` Mina Almasry
2025-05-09 18:11     ` Matthew Wilcox
2025-05-09 19:04       ` Mina Almasry
2025-05-09 19:48         ` Matthew Wilcox
2025-05-12 19:10           ` Mina Almasry
2025-05-09 18:02   ` Matthew Wilcox
2025-05-12 12:51     ` Byungchul Park
2025-05-12 14:42       ` Matthew Wilcox
2025-05-13  1:42         ` Byungchul Park
2025-05-13  3:19           ` Matthew Wilcox
2025-05-13 10:24             ` Byungchul Park
2025-05-10  1:56   ` kernel test robot
2025-05-10  7:26   ` Ilias Apalodimas
2025-05-12 12:58     ` Byungchul Park
2025-05-09 14:09 ` [RFC 00/19] Split netmem from " Mina Almasry
2025-05-12 12:36   ` Byungchul Park
2025-05-12 12:59     ` Pavel Begunkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250512123051.GA45370@system.software.com \
    --to=byungchul@sk.com \
    --cc=akpm@linux-foundation.org \
    --cc=almasrymina@google.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=ast@kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=harry.yoo@oracle.com \
    --cc=hawk@kernel.org \
    --cc=ilias.apalodimas@linaro.org \
    --cc=john.fastabend@gmail.com \
    --cc=kernel_team@skhynix.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vishal.moola@gmail.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.