All of lore.kernel.org
 help / color / mirror / Atom feed
From: Byungchul Park <byungchul@sk.com>
To: Pavel Begunkov <asml.silence@gmail.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, almasrymina@google.com,
	ilias.apalodimas@linaro.org, harry.yoo@oracle.com,
	hawk@kernel.org, akpm@linux-foundation.org, davem@davemloft.net,
	john.fastabend@gmail.com, andrew+netdev@lunn.ch, toke@redhat.com,
	tariqt@nvidia.com, edumazet@google.com, pabeni@redhat.com,
	saeedm@nvidia.com, leon@kernel.org, ast@kernel.org,
	daniel@iogearbox.net, david@redhat.com,
	lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com,
	vbabka@suse.cz, rppt@kernel.org, surenb@google.com,
	mhocko@suse.com, horms@kernel.org, linux-rdma@vger.kernel.org,
	bpf@vger.kernel.org, vishal.moola@gmail.com, hannes@cmpxchg.org,
	ziy@nvidia.com, jackmanb@google.com
Subject: Re: [PATCH net-next v9 2/8] netmem: introduce utility APIs to use struct netmem_desc
Date: Mon, 14 Jul 2025 19:05:51 +0900	[thread overview]
Message-ID: <20250714100551.GA44803@system.software.com> (raw)
In-Reply-To: <5ee839d6-2734-41c5-b34c-8d686c910bc8@gmail.com>

On Mon, Jul 14, 2025 at 10:43:35AM +0100, Pavel Begunkov wrote:
> On 7/14/25 00:07, Byungchul Park wrote:
> > On Sat, Jul 12, 2025 at 12:59:34PM +0100, Pavel Begunkov wrote:
> > > On 7/10/25 09:28, Byungchul Park wrote:
> > > ...> +
> > > >    static inline struct net_iov *netmem_to_net_iov(netmem_ref netmem)
> > > >    {
> > > >        if (netmem_is_net_iov(netmem))
> > > > @@ -314,6 +340,21 @@ static inline netmem_ref netmem_compound_head(netmem_ref netmem)
> > > >        return page_to_netmem(compound_head(netmem_to_page(netmem)));
> > > >    }
> > > > 
> > > > +#define nmdesc_to_page(nmdesc)               (_Generic((nmdesc),             \
> > > > +     const struct netmem_desc * :    (const struct page *)(nmdesc),  \
> > > > +     struct netmem_desc * :          (struct page *)(nmdesc)))
> > > 
> > > Considering that nmdesc is going to be separated from pages and
> > > accessed through indirection, and back reference to the page is
> > > not needed (at least for net/), this helper shouldn't even exist.
> > > And in fact, you don't really use it ...
> > > > +static inline struct netmem_desc *page_to_nmdesc(struct page *page)
> > > > +{
> > > > +     VM_BUG_ON_PAGE(PageTail(page), page);
> > > > +     return (struct netmem_desc *)page;
> > > > +}
> > > > +
> > > > +static inline void *nmdesc_address(struct netmem_desc *nmdesc)
> > > > +{
> > > > +     return page_address(nmdesc_to_page(nmdesc));
> > > > +}
> > > 
> > > ... That's the only caller, and nmdesc_address() is not used, so
> > > just nuke both of them. This helper doesn't even make sense.
> > > 
> > > Please avoid introducing functions that you don't use as a general
> > > rule.
> > 
> > I'm sorry about making you confused.  I should've included another patch
> > using the helper like the following.
> 
> Ah, I see. And still, it's not a great function. There should be
> no way to extract a page or a page address from a nmdesc.
> 
> For the diff below it's same as with the mt76 patch, it's allocating
> a page, expects it to be a page, using it as a page, but for no reason
> keeps it wrapped into netmem. It only adds confusion and overhead.
> A rule of thumb would be only converting to netmem if the new code
> would be able to work with a netmem-wrapped net_iovs.

Thanks.  I'm now working on this job, avoiding your concern.

By the way, am I supposed to wait for you to complete the work about
extracting type from page e.g. page pool (or bump) type?

	Byungchul

> > diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
> > index cef9dfb877e8..adccc7c8e68f 100644
> > --- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
> > +++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
> > @@ -3266,7 +3266,7 @@ static u32 idpf_rx_hsplit_wa(const struct libeth_fqe *hdr,
> >                            struct libeth_fqe *buf, u32 data_len)
> >   {
> >       u32 copy = data_len <= L1_CACHE_BYTES ? data_len : ETH_HLEN;
> > -     struct page *hdr_page, *buf_page;
> > +     struct netmem_desc *hdr_nmdesc, *buf_nmdesc;
> >       const void *src;
> >       void *dst;
> > 
> > @@ -3274,10 +3274,10 @@ static u32 idpf_rx_hsplit_wa(const struct libeth_fqe *hdr,
> >           !libeth_rx_sync_for_cpu(buf, copy))
> >               return 0;
> > 
> > -     hdr_page = __netmem_to_page(hdr->netmem);
> > -     buf_page = __netmem_to_page(buf->netmem);
> > -     dst = page_address(hdr_page) + hdr->offset + hdr_page->pp->p.offset;
> > -     src = page_address(buf_page) + buf->offset + buf_page->pp->p.offset;
> > +     hdr_nmdesc = __netmem_to_nmdesc(hdr->netmem);
> > +     buf_nmdesc = __netmem_to_nmdesc(buf->netmem);
> > +     dst = nmdesc_address(hdr_nmdesc) + hdr->offset + hdr_nmdesc->pp->p.offset;
> > +     src = nmdesc_address(buf_nmdesc) + buf->offset + buf_nmdesc->pp->p.offset;
> > 
> >       memcpy(dst, src, LARGEST_ALIGN(copy));
> >       buf->offset += copy;
> --
> Pavel Begunkov

  reply	other threads:[~2025-07-14 10:05 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-10  8:27 [PATCH net-next v9 0/8] Split netmem from struct page Byungchul Park
2025-07-10  8:28 ` [PATCH net-next v9 1/8] netmem: introduce struct netmem_desc mirroring " Byungchul Park
2025-07-12 14:39   ` Pavel Begunkov
2025-07-14  4:23     ` Byungchul Park
2025-07-14 11:30       ` Pavel Begunkov
2025-07-14 11:58         ` Byungchul Park
2025-07-14 19:17         ` Mina Almasry
2025-07-15 10:01           ` Pavel Begunkov
2025-07-10  8:28 ` [PATCH net-next v9 2/8] netmem: introduce utility APIs to use struct netmem_desc Byungchul Park
2025-07-10 18:11   ` Mina Almasry
2025-07-11  1:02     ` Byungchul Park
2025-07-12 12:16       ` Pavel Begunkov
2025-07-12 12:05     ` Pavel Begunkov
2025-07-12 11:59   ` Pavel Begunkov
2025-07-13 23:07     ` Byungchul Park
2025-07-13 23:39       ` Byungchul Park
2025-07-14  9:43       ` Pavel Begunkov
2025-07-14 10:05         ` Byungchul Park [this message]
2025-07-14 11:45           ` Pavel Begunkov
2025-07-14 12:06             ` Byungchul Park
2025-07-10  8:28 ` [PATCH net-next v9 3/8] page_pool: access ->pp_magic through struct netmem_desc in page_pool_page_is_pp() Byungchul Park
2025-07-10 18:19   ` Mina Almasry
2025-07-11  1:14     ` Byungchul Park
2025-07-12 13:58       ` Pavel Begunkov
2025-07-12 14:52         ` David Hildenbrand
2025-07-12 15:09           ` Pavel Begunkov
2025-07-13 23:22             ` Byungchul Park
2025-07-17  3:08         ` Byungchul Park
2025-07-22  1:23           ` Byungchul Park
2025-07-28 18:19             ` Pavel Begunkov
2025-07-14 19:09       ` Mina Almasry
2025-07-15  9:53         ` Pavel Begunkov
2025-07-10  8:28 ` [PATCH net-next v9 4/8] netmem: use netmem_desc instead of page to access ->pp in __netmem_get_pp() Byungchul Park
2025-07-10 18:25   ` Mina Almasry
2025-07-11  1:17     ` Byungchul Park
2025-07-10  8:28 ` [PATCH net-next v9 5/8] netmem: introduce a netmem API, virt_to_head_netmem() Byungchul Park
2025-07-10 18:26   ` Mina Almasry
2025-07-10  8:28 ` [PATCH net-next v9 6/8] mlx4: use netmem descriptor and APIs for page pool Byungchul Park
2025-07-10 18:29   ` Mina Almasry
2025-07-11  1:32     ` Byungchul Park
2025-07-14 19:02       ` Mina Almasry
2025-07-10  8:28 ` [PATCH net-next v9 7/8] netdevsim: " Byungchul Park
2025-07-10 18:26   ` Mina Almasry
2025-07-10  8:28 ` [PATCH net-next v9 8/8] mt76: " Byungchul Park
2025-07-12 14:22   ` Pavel Begunkov
2025-07-14  2:13     ` Byungchul Park
2025-07-10  8:47 ` [PATCH net-next v9 0/8] Split netmem from struct page Byungchul Park
2025-07-10 18:35 ` Mina Almasry
2025-07-11  0:42   ` Byungchul Park

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=20250714100551.GA44803@system.software.com \
    --to=byungchul@sk.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=almasrymina@google.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=asml.silence@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=david@redhat.com \
    --cc=edumazet@google.com \
    --cc=hannes@cmpxchg.org \
    --cc=harry.yoo@oracle.com \
    --cc=hawk@kernel.org \
    --cc=horms@kernel.org \
    --cc=ilias.apalodimas@linaro.org \
    --cc=jackmanb@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=kernel_team@skhynix.com \
    --cc=kuba@kernel.org \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=mhocko@suse.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=rppt@kernel.org \
    --cc=saeedm@nvidia.com \
    --cc=surenb@google.com \
    --cc=tariqt@nvidia.com \
    --cc=toke@redhat.com \
    --cc=vbabka@suse.cz \
    --cc=vishal.moola@gmail.com \
    --cc=willy@infradead.org \
    --cc=ziy@nvidia.com \
    /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.