From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82167C83F1A for ; Thu, 10 Jul 2025 08:28:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D3A586B00B3; Thu, 10 Jul 2025 04:28:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CCB226B00B4; Thu, 10 Jul 2025 04:28:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AF0696B00B5; Thu, 10 Jul 2025 04:28:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 957C46B00B3 for ; Thu, 10 Jul 2025 04:28:29 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6153A129850 for ; Thu, 10 Jul 2025 08:28:29 +0000 (UTC) X-FDA: 83647678338.03.691027B Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf27.hostedemail.com (Postfix) with ESMTP id 7D76140009 for ; Thu, 10 Jul 2025 08:28:26 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; spf=pass (imf27.hostedemail.com: domain of byungchul@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=byungchul@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752136106; a=rsa-sha256; cv=none; b=d7yqutNrFklkcBXvxcr3QE6tOVSyNY10L8P3GhroWL3BtOQf+spwX91c5TYwIVtu8QsC+7 CRbAJsI9z/zNEhy0aUq9EfegmrrW1zCrObBXEXFb46MrD3y+IMEtmtf+C5dda83lRyYBUG bUD0zu5GyM3TbcqV2Fe8SwQ33lKVnl8= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf27.hostedemail.com: domain of byungchul@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=byungchul@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752136106; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:in-reply-to: references:references; bh=LQ3/Gme57eVKhWV0tk3Qx/FRLWCwEPVPVsbojASWaWc=; b=TR8P1MWME7+Ig3+JzmzPnARRpuotXtYuCSuLmyPy+LfPP29cQXaRxB0fTV3DlhgFUcBM4H IdFmRd7wIDUOmSXSzZiOB2BN4Qup0al/hWNOqL/8qhHOU2tduAr411t2lNAR1jK7trNuLr CBjVy6xw1BYJhF00dzwagkKGwi+G/mA= X-AuditID: a67dfc5b-681ff7000002311f-24-686f79a2b94b From: Byungchul Park To: willy@infradead.org, netdev@vger.kernel.org Cc: 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, asml.silence@gmail.com, 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: [PATCH net-next v9 8/8] mt76: use netmem descriptor and APIs for page pool Date: Thu, 10 Jul 2025 17:28:07 +0900 Message-Id: <20250710082807.27402-9-byungchul@sk.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250710082807.27402-1-byungchul@sk.com> References: <20250710082807.27402-1-byungchul@sk.com> X-Brightmail-Tracker: H4sIAAAAAAAAAzWRe0hTYRyG+3a+nXNcjY5r1MmMYN1A1O71K6KECL5CIbAgirKRBzea06aZ 0wotYym5rnTRJbPwNpXptLmsRs2lhoLLspZmyiQh0iJXpi6oLem/h/d9ef55WUr2Gkewam2m oNMqNQpagiXj88pj7uvTVGtbroWDyVpHQ+1UNlQNO8RgstgR/JgeYMDv7qDhQfkkBaaeAgw/ rTMUfGr3MVBrS4ChylEMTwwtFPiudNJQXBCg4On0VwbOO6pF4LEbxXBzpoKClrxhBl63mmj4 WPdHDKOuYgwvS2owDBnjoN28ECa7xhC4rS0imLx8j4YbvWYaRgqGEPS2+TCU5hsRWJ1eMQSm go7SFx+ZuBWkbewbRZpr3ovIo5JBhphtp0hTdRQp8vZSxGYppIlt4jpDPrx9QpPOOwFMHjn8 IlJ84StNvn/qx+Sbs48m1uY+TLrNbmZf+CHJ9mRBo84SdGt2HJOo+svcKH0kNrvR3CHOQ+Or ilAYy3Mb+ef1DeL/7OoqE4WY5lbzXu80FWI5t473+zpwEZKwFFdP8+66ASZULOASeefgQxxi zK3k/cMBFGIpt4l/c6UTz0qX8bUNz4Iilg3jNvOOkdxQLAtOAn1F/5w8V8jybb4a0ex+Mf+8 2ouvIqkZzbEgmVqblapUazbGqvRadXbs8bRUGwpeXXn292EHmvAkuhDHIsU8qSdFq5KJlVkZ +lQX4llKIZdOHdSoZNJkpT5H0KUl6U5phAwXWsJixSLp+snTyTIuRZkpnBCEdEH3vxWxYRF5 6MCt74Z4W0xqXK98R8qXwsjjPfPTydk9MfKsVwZt381fFT9nMocvliw/ssuQk7tN4LZ0G/Ob ThieJs2Vb114tCdC8fmuf87iy57RKknp0nxPBP2+9fGGH5Hane/23wu73Wqy50zcccYPIos9 IToBzpyMtDt3Rzvr9/ovqSJV5xq3K3CGSrkuitJlKP8C6pGvpuYCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAAzWRa0hTcRyG++/8d3a2HByW1cECYWiCkam5+EFWUh86BFYgZPShGnlww23K pua6gKUQrpxZQaJTVuHyMlstyxlqNafOJCxvmJWueSnKXKnpdHZxRN8e3vfl+fJShOQxDqOU mmxOq5GrpKQIiw7tKth2R5+piP1VhsBks5JQ78+Dex4HH0x1TxDML70TwJyri4S7txcIMPUW YvhpWyZgstMrgHp7MoxZpjC0XG4iwFviJqG4MEBA69KMAC45anjQXtnNh9dPjHy4uVxNQFO+ RwD9T00kjFr/8GHKWYyhu7wWw5gxCTrNG2ChZxqBy9bEg4WrlSTc6DOTMF44hqCv3Yuh4qIR ga1tmA8B/6qjomNUkBTJtk/7CLax9i2PbS7/IGDN9hz2UU00axjuI1h7XRHJ2mevC9j3Qy0k 6y4LYLbZMcdjiwtmSPbH5AhmfW2DJHv383cea2scxEckx0WJaZxKmctpt+85JVKMVLlQ1nhM 3kNzFz8ffdtiQEKKoRMYZ08VL8gkHcUMDy8RQQ6l45g5bxc2IBFF0A0k47K+EwSLdXQK0/bh MQ4ypiOZOU8ABVlMy5iBEjf+Jw1n6h88XxVRlJDeyTjGzwVjyeokMGjA15DIjNbUoVClJlct V6pkMboMhV6jzIs5nam2o9UzLRdWSh1ovv+AE9EUkoaIX6drFBK+PFenVzsRQxHSULH/mEoh EafJ9Wc5beZJbY6K0znRJgpLN4oPpnKnJHS6PJvL4LgsTvu/5VHCsHykuiWbdne8TEAvqpwp uZYxLqxfSURbot7Mrt987s+z6f6Js8aQkAZp55d9pdU/Td6tjZH79cYBdezRuvB9PtnvV917 Pbs/3T89tGFHWmLC4STDYmq8UD3hOpEx2quLL2+5s/g1uai1pJ5cXHteOnglQmb3W86slG36 GOGs8VnFQinWKeRx0YRWJ/8Lpda2gsgCAAA= X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: 7D76140009 X-Stat-Signature: emxsmt4hguws8jre3fk4hz5htdkbdzhj X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1752136106-533282 X-HE-Meta: U2FsdGVkX1/MXy9E/bzKJtyEdC8pwIHBygdVRNXq2JhEtv+HKkkXx3Q3y3ci3LGLg9ynVhLmneColtkHMFwqA5kA046QpjH75L7aRwrVxYetWBda/cshVxLLSjBO/ZlRZOvCFtoiUdT25HcYoOMBCXWPDCfsnvJCOwj0C//1gzvrjUh/WN4nO51aweifxMCf5Hi0B7KFOuBsAvG4exE1iK1iIZInZ4swI4OqNNTrRtXRk+E8PCuKChmUuT7LmVmW8QR0YQIu4P4HQhOsEbBKoLfXe/RHIzpZNw4AQ2yS1jns3PswFvsEUlzVYbsow1eD0ycPn1t1qfLxwCKxIB/E91a+tO3RDh3U3U9vUjjmG7cD/ZpRAUk+LpXbeHuoh9Hz5m41X8OtRwW4IOpOxSJxhKmDTmhmw2Q5dFi27gULITPpiENs1yICTS7PMYaIYrgS5wHt02ZOCs2TJ99vy68u12tqo+Qx6RKvILWERh54D8gUCPtRpgYN5WR1gEUgAYoaQ2cMamYuCBuEUVGqWgeCft509acz9ukSXdZBRnqbqKYLCVbq3IfAI+2Ntq1BXLqHe6qsR8c8oA2Z/RktTb3YXQUQOEBNCQ8/nf7bUQXGMNiojZ58IKrOiKTEM4xypTbS081/IUi/8yJ/lY71XOQzl3PSb4/P/a0HiMVeldRREjTl9iRNMankfsVlZpFG/rOblmOrMuAQqoFSvAZQFe+vMzBtPZMfo/y0D670tNw6ZGCzgIX1taPeSNxqmdOb3bRjrjKiDhQMlnLBectPEO0Mh75b1mNHDbzml7CktbcoUv7SHVsJITnuj9u7sKTMbZG+Kf4brIjxiVCvMrj8J3XbrbFxwrJBoDjetroHP++QGD4d6b/6FpkO1GAUZOzkMbfqFzDTVzXbZVLdqsK2g3ZKjHHcTia3Vhuz1clFsSnqcNSwgqaqQTKtsx6QgDIquRIEMOtNzUj8sDDTJ47eY7R Be6iVxzi oTqrbpGQJGOzCTUekKCOHZyIlAlRaRkrpZSkd5A3LmGJgpBqaDF/mOpIFZ7u6yeiaBHnQ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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 Reviewed-by: Mina Almasry --- drivers/net/wireless/mediatek/mt76/dma.c | 6 ++--- drivers/net/wireless/mediatek/mt76/mt76.h | 12 +++++----- .../net/wireless/mediatek/mt76/sdio_txrx.c | 24 +++++++++---------- drivers/net/wireless/mediatek/mt76/usb.c | 10 ++++---- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c index 35b4ec91979e..41b529b95877 100644 --- a/drivers/net/wireless/mediatek/mt76/dma.c +++ b/drivers/net/wireless/mediatek/mt76/dma.c @@ -820,10 +820,10 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data, int nr_frags = shinfo->nr_frags; if (nr_frags < ARRAY_SIZE(shinfo->frags)) { - struct page *page = virt_to_head_page(data); - int offset = data - page_address(page) + q->buf_offset; + netmem_ref netmem = virt_to_head_netmem(data); + int offset = data - netmem_address(netmem) + q->buf_offset; - skb_add_rx_frag(skb, nr_frags, page, offset, len, q->buf_size); + skb_add_rx_frag_netmem(skb, nr_frags, netmem, offset, len, q->buf_size); } else { mt76_put_page_pool_buf(data, allow_direct); } diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index 14927a92f9d1..5fbc15a8cb06 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -1796,21 +1796,21 @@ int mt76_rx_token_consume(struct mt76_dev *dev, void *ptr, int mt76_create_page_pool(struct mt76_dev *dev, struct mt76_queue *q); static inline void mt76_put_page_pool_buf(void *buf, bool allow_direct) { - struct page *page = virt_to_head_page(buf); + netmem_ref netmem = virt_to_head_netmem(buf); - page_pool_put_full_page(page->pp, page, allow_direct); + page_pool_put_full_netmem(netmem_get_pp(netmem), netmem, allow_direct); } static inline void * mt76_get_page_pool_buf(struct mt76_queue *q, u32 *offset, u32 size) { - struct page *page; + netmem_ref netmem; - page = page_pool_dev_alloc_frag(q->page_pool, offset, size); - if (!page) + netmem = page_pool_dev_alloc_netmem(q->page_pool, offset, &size); + if (!netmem) return NULL; - return page_address(page) + *offset; + return netmem_address(netmem) + *offset; } 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); 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; diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c index f9e67b8c3b3c..1ea80c87a839 100644 --- a/drivers/net/wireless/mediatek/mt76/usb.c +++ b/drivers/net/wireless/mediatek/mt76/usb.c @@ -478,7 +478,7 @@ mt76u_build_rx_skb(struct mt76_dev *dev, void *data, head_room = drv_flags & MT_DRV_RX_DMA_HDR ? 0 : MT_DMA_HDR_LEN; if (SKB_WITH_OVERHEAD(buf_size) < head_room + len) { - struct page *page; + netmem_ref netmem; /* slow path, not enough space for data and * skb_shared_info @@ -489,10 +489,10 @@ mt76u_build_rx_skb(struct mt76_dev *dev, void *data, skb_put_data(skb, data + head_room, MT_SKB_HEAD_LEN); data += head_room + MT_SKB_HEAD_LEN; - page = virt_to_head_page(data); - skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, - page, data - page_address(page), - len - MT_SKB_HEAD_LEN, buf_size); + netmem = virt_to_head_netmem(data); + skb_add_rx_frag_netmem(skb, skb_shinfo(skb)->nr_frags, + netmem, data - netmem_address(netmem), + len - MT_SKB_HEAD_LEN, buf_size); return skb; } -- 2.17.1