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 3054EC5AE59 for ; Wed, 4 Jun 2025 02:53:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8EE8B6B0568; Tue, 3 Jun 2025 22:53:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E37F6B056A; Tue, 3 Jun 2025 22:53:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 533DF6B056B; Tue, 3 Jun 2025 22:53:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 2CDDE6B056A for ; Tue, 3 Jun 2025 22:53:12 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id DF946162004 for ; Wed, 4 Jun 2025 02:53:11 +0000 (UTC) X-FDA: 83516196582.25.F12CFF4 Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf03.hostedemail.com (Postfix) with ESMTP id 0ABB820003 for ; Wed, 4 Jun 2025 02:53:09 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf03.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=1749005590; 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=dbDKfhiDwY4q2pMK8KXyixidKcu+3qM7z0/AA4tUYuI=; b=p8LNE4+9J8QNJXBwXXoHfAIJ3gw9+JFk0DOi1siUMp+KoMU2XuYY9zu7Oz1US9YqnkYTBz 1S+a33N7QIgUc6tqIo6vGSRwp73e2Ezdf1Etuqy0wNyzbmQr4XUBUJbHT7szpjl1aGtK+F vFdjei9lWYj7ISuAw65eb4daYrlW8p8= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf03.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=1749005590; a=rsa-sha256; cv=none; b=pwAtrEQumfiJ4VA2PLFCA8eKoSx6K1qttfWuAWwNuWpvYZ+Uc0OKleGScG2HOEm5E2HwrK 8mSlyksKRg+eTu9WhxpFTDsAbTMrHs0YAtpyJBtwWiBnxHh3SEM46V8eK4Um9e6KkEjkTr UIZTfopxTcBLhLXYgIDwe7VBeqNjHUc= X-AuditID: a67dfc5b-681ff7000002311f-65-683fb50ad98e 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 Subject: [RFC v4 17/18] mt76: use netmem descriptor and APIs for page pool Date: Wed, 4 Jun 2025 11:52:45 +0900 Message-Id: <20250604025246.61616-18-byungchul@sk.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250604025246.61616-1-byungchul@sk.com> References: <20250604025246.61616-1-byungchul@sk.com> X-Brightmail-Tracker: H4sIAAAAAAAAAzWRW0hTcRzH/e+cnTOHi8MSO1l5WRdRaKlo/YxSezAOvRSFEvaQQw9teWXq cpGwVJKGmlmR6KSZaPPGbHmZJlZqU7PyXis1RZlEeUGn5o3KrXz78P3y/bx8eZiwE3flyRJS WHmCJE5E8HH+nFPpUX5DiNT3V/FJ0OhrCKheS4Nnk0YuaKoaESyvj5Jg7ewioKx0FQNNXxYO K/oNDCymKRImKmZwaM1uwmDqXjcBuVmbGGQYdRzob8zjwsONcgyaVJMkDLVoCPhW84cLM+25 OPQUVeIwkRcKJq0LrPbOIujUN3FgNaeEgAeDWgKmsyYQDHZM4VB8Ow+Bvs3Mhc01DRHqydRX fuEwzUXjJKM1pDIvdD6M2jyIMYaquwRjWCogmbFPrQTTXbiJM81GK4fJzZwnmEXLV5xZaBsh GH39CM6813aSjNXgdoGK5J+KYeNkClZ+LDiKL300r0ZJ0+I0yweuCs0dUSNHHk0F0Jmz/dwd Hr8zh9mYoLxos3ndzs6UH22d6sLViM/DqHkubdFscmzFbuocvaV9SdoYpw7TlY09dpGAOk6X fraS/6TudHXda7vIcTsfm39s3wqpQDrXOIzZpDS1SNJmS/3/wV76jc6M5yOBFjlUIaEsQREv kcUFiKXKBFmaODox3oC2v61I37piREv9l9oRxUMiJ4FxLFgq5EoUycr4dkTzMJGzwN17OxLE SJQ3WXniVXlqHJvcjvbxcNEegf/qjRghdU2SwsaybBIr32k5PEdXFQo8H/7OLeiV21MVENLR g4XKZcNyS2JDpOlJ32x+X5DoY/qCx/OzP3qtOSFhsfShXs8z90mxduXyW4VThH/TdPjowC5B Bxs2UFfgm6+JnlbU1h64laFLcikrF5tKhuTXXXSBKrVX9NZ3dcR+h4unT0T81PREDYuym3/3 BEo9vMdFeLJU4ueDyZMlfwGFNgbr1wIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAAzWRW0hTcRzH/e9cNpeL05I86YM5TFFoJmr8QDERwZMP0UtEveTIQ1tuUzYd TopWWuJqs4t20UkTSd1UJst0XqkpXqgwNGuaN2YTCbVME3WGOaO3D58v3+/Ll4cJ6/FgnkyZ x6qUErmI5OP8s4lFJ/ivT0tPfjOFgcnWRELjZgHUzzkIMFnbEKxvfeXCWv8gCbU1GxiYRopx +G3bxsAz4ObCbN0CDt0l7Ri4y4ZIMBR7MbjtaOBAX/UwAR/bjASUb7/EoF03x4WxThMJM027 BCw4DTgMV1pwmDWmwID5CGy8W0LQb2vnwMb9ahIej5pJmC+eRTDa58ah6pYRga3XRYB300Sm iJhWywSH6aic5jJmez7zqiGa0btGMcZuLSUZ+69HXGbqczfJDD3z4kyHY43DGIpWSGbVM4kz P3rHSaZ28SeHsbWO48x7cz/33KFL/KQsVi7TsKqY5Ey+tGJFj3LnxQWeD4QOLUfokT+PpuLp 6bvLmI9JKpJ2ubb2OZCKpdfcg7ge8XkYtULQHpOX4wsOUxn0jrmL62OcOk5b2oYJHwuoU3TN lzXuv9FQurHlzf6Q/56fWnm63xVSCbTB8Ql7gPhm5GdFgTKlRiGRyRPE6mypVikrEF/JUdjR 3n11N3YeOtD6WLoTUTwkChA4ppKlQkKiUWsVTkTzMFGgIDRqTwmyJNpCVpVzWZUvZ9VOFMLD RUGCjAtsppC6Ksljs1k2l1X9Tzk8/2AdGlmN0zzvabjpvR4dEtwWYi/tbpEXL3jMmoz0tCXF k+qYt9265GtTu7pLKUuLrqjUuIGyAqQ9WnpPW2I5GHagc0ZYGF5pVTqNdanNk0EdPcry1vQu 4bGttMj4M/OxIAotZc+LvvObFRdbJGm7vd4QP3VS4p+ygPCKqgjxxIs7IlwtlcRGYyq15C95 mtG/ugIAAA== X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: 0ABB820003 X-Stat-Signature: atihyy9zhme35g4w7f7e7ieiwm5e79ss X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1749005589-989539 X-HE-Meta: U2FsdGVkX1+7zHfWrlpAFYYpphnz2iH5xBsCGFJEDCR1aNtOONcBGlydDd66pEUbLcoN63lsTxo8oU7nxGl1wGJIxSHr9vqNsQgiuYtLs23oLxVpQ5kKnI1kVyuXRtuglC08VuulbF+hvTMQyrTt+0dROmGgGp2iquHndBbuhUzLoDZ8NdoQsTYTHwxAq4OZIM8rTWH6yEmdirNI0PBT0UgXkBchstZ8nFzwrhCxMhmrF/LG4eGUy9aE6/Khm/Jpea9Olq8EpxemPxlQfgsWDXqaVL8RzUKQnEFBi5mHS4eLr7l2CTmPhvcyTXPzFupsJbI90L+1cvfmy6MxZCO0YIvKky/okqeeeJWFz4At24tqkJ7prdGNJs/Mnwxg6/4MXF/4jpPRjo9xzm9pY56T7qK5pEp/bVnYcfmLzuw2JvwvaQwJTFzvm5FBmT9XAKNmSXMCQFa9bF3ZzxO13XGML+mkvx9bMFVRbizVlYngVdzd4uAvnZZ4HaT0ICkq2aSwxpDXE4IJNNGq9MW9rUo0yN+ZTYQcbmfLlZ5IuMCuoH9U559LRew9olqbCOLbbpQZU2O46LXv0/oLnuN6Ivg2u0Ruz7diTvxYkRuZDl82n2lVZFDthtepCANfAjT5ZP4tqXjLtZoAxEMYnwq1g2m2qYyVHgNctNtzgoLj9kGbx8c3jQghu/fgFXIAfuNtblmPhvhaprWy84prfAB6sCLvwAKXIWSyltMb9BW5GrxEih/C4TBWA0qvmmQQF/yrvCP7swq/oZe98cX5hjO14WRbwShVv6MYcc7V7snJWXHEtD2i2LTWw8avXIsPKZ0NayIjoNZIeUjy1XImhIN4Hjz2qpMK8/i91o52t1KO70FMmcUeaYC7hekLvzvayX4bB6D2QCdOGLnS91Iu6D8jQtetrTqto61KyNQXx0KWLXoYLSr4c/BZQdZ0tPjo7FuhoeDxccYkkv3N1QF5ExO1o0+ 5hoMiU1g HbYMsXUxQDWlCDZQDiGveb+cU1d75IWW8rNUey5FI3BlRoK8T3cvwqi3gHkxA3GJhwu+dtsZl1Qk5+eL6M34pXiO5cTaktBjgMIlZ 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 5f8d81cda6cd..16d09b6d8270 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -1795,21 +1795,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