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 8/8] mt76: use netmem descriptor and APIs for page pool
Date: Mon, 14 Jul 2025 11:13:30 +0900 [thread overview]
Message-ID: <20250714021330.GA9457@system.software.com> (raw)
In-Reply-To: <a21b340d-6d0f-4d39-906e-e983564605ed@gmail.com>
On Sat, Jul 12, 2025 at 03:22:17PM +0100, Pavel Begunkov wrote:
> On 7/10/25 09:28, Byungchul Park wrote:
> > To simplify struct page, the effort to separate its own descriptor from
> > struct page is required and the work for page pool is on going.
> >
> > Use netmem descriptor and APIs for page pool in mt76 code.
> >
> > Signed-off-by: Byungchul Park <byungchul@sk.com>
> > Reviewed-by: Mina Almasry <almasrymina@google.com>
> > ---
> ...> static inline void mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked)
> > diff --git a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
> > index 0a927a7313a6..b1d89b6f663d 100644
> > --- a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
> > +++ b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
> > @@ -68,14 +68,14 @@ mt76s_build_rx_skb(void *data, int data_len, int buf_len)
> >
> > skb_put_data(skb, data, len);
> > if (data_len > len) {
> > - struct page *page;
> > + netmem_ref netmem;
> >
> > data += len;
> > - page = virt_to_head_page(data);
> > - skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
> > - page, data - page_address(page),
> > - data_len - len, buf_len);
> > - get_page(page);
> > + netmem = virt_to_head_netmem(data);
> > + skb_add_rx_frag_netmem(skb, skb_shinfo(skb)->nr_frags,
> > + netmem, data - netmem_address(netmem),
> > + data_len - len, buf_len);
> > + get_netmem(netmem);
> > }
> >
> > return skb;
> > @@ -88,7 +88,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
> > struct mt76_queue *q = &dev->q_rx[qid];
> > struct mt76_sdio *sdio = &dev->sdio;
> > int len = 0, err, i;
> > - struct page *page;
> > + netmem_ref netmem;
> > u8 *buf, *end;
> >
> > for (i = 0; i < intr->rx.num[qid]; i++)
> > @@ -100,11 +100,11 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
> > if (len > sdio->func->cur_blksize)
> > len = roundup(len, sdio->func->cur_blksize);
> >
> > - page = __dev_alloc_pages(GFP_KERNEL, get_order(len));
> > - if (!page)
> > + netmem = page_to_netmem(__dev_alloc_pages(GFP_KERNEL, get_order(len)));
> > + if (!netmem)
> > return -ENOMEM;
> >
> > - buf = page_address(page);
> > + buf = netmem_address(netmem);
>
> We shouldn't just blindly convert everything to netmem just for the purpose
> of creating a type casting hell. It's allocating a page, and continues to
> use it as a page, e.g. netmem_address() will fail otherwise. So just leave
> it to be a page, and convert it to netmem and the very last moment when
> the api expects a netmem. There are likely many chunks like that.
Thanks for the feedback.
Unon reconsideration, focusing on the conversion between page and
netmem_desc, plus small modification on user side code e.i. driver are
sufficient to achieve my objectives. I won't change a lot on user side
code like this from the next spin.
Byungchul
> >
> > sdio_claim_host(sdio->func);
> > err = sdio_readsb(sdio->func, buf, MCR_WRDR(qid), len);
> > @@ -112,7 +112,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
> >
> > if (err < 0) {
> > dev_err(dev->dev, "sdio read data failed:%d\n", err);
> > - put_page(page);
> > + put_netmem(netmem);
> > return err;
> > }
> >
> > @@ -140,7 +140,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
> > }
> > buf += round_up(len + 4, 4);
> > }
> > - put_page(page);
> > + put_netmem(netmem);
> >
> > spin_lock_bh(&q->lock);
> > q->head = (q->head + i) % q->ndesc;
> --
> Pavel Begunkov
next prev parent reply other threads:[~2025-07-14 2:13 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
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 [this message]
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=20250714021330.GA9457@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.