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 069C6C54ED1 for ; Wed, 28 May 2025 02:30:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F2B7C6B009D; Tue, 27 May 2025 22:29:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ECFCA6B00A2; Tue, 27 May 2025 22:29:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CD38D6B00A3; Tue, 27 May 2025 22:29:34 -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 9D5266B009E for ; Tue, 27 May 2025 22:29:34 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 58952EBA89 for ; Wed, 28 May 2025 02:29:34 +0000 (UTC) X-FDA: 83490735468.07.AF5E9E9 Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id 6BBD6100002 for ; Wed, 28 May 2025 02:29:32 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.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=1748399372; 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=xX08YVydg6iNLMymcFJjmpPwTZEsLivi5eXo4FpAcTw=; b=M9It2nJwZWlH434q6d4+NGHEc0pWlQFjgJtRoFYylN7wwgM8mQTZGVqPXGDEsBbRkstFu0 1UT3AoHxy09m3pl+11TxtMpaBnq82KXoBJMiYFiZrqdnAKtxEW8TCmUvL7iV+CCr9IQicg k5tNmpwBnmVX9VdrEeXtPHu/Y3gqReQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748399372; a=rsa-sha256; cv=none; b=1mv1w9qsIrcND8EnZTt6hRCz8MHlIUZ9fERifUzRomqwl15oHSvv4joeA/tPEQQ54bkul+ EayFmalCKzqWJp+krZZcuFm30BbAQWn2VFkh0QBl0BxfpNUfSd1QzfWhU9koq28v5Nhp2x UDvjpn+i+ZVOTrmRyCBfxVDfWzh7Bd8= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of byungchul@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=byungchul@sk.com X-AuditID: a67dfc5b-669ff7000002311f-bd-683675021852 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: [PATCH v2 16/16] mt76: use netmem descriptor and APIs for page pool Date: Wed, 28 May 2025 11:29:11 +0900 Message-Id: <20250528022911.73453-17-byungchul@sk.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250528022911.73453-1-byungchul@sk.com> References: <20250528022911.73453-1-byungchul@sk.com> X-Brightmail-Tracker: H4sIAAAAAAAAAzWRW0hTcRzH/e+cnR2Hy8PSOhrdJikJ3krXjzCTHur/kCH4lg829NSWusm8 NIVgXkic08R8CJ0085K3nCzxUsvykloKyVJZpSmKRuQFnZq6zJzR24fP98fn5UcT4j7Sm1Yo 0zi1UpYkoYSkcMmtKoCXLpUH62qkYDA1U9C0pYFnM518MDS2I1jf/ioAe/8gBdVVmwQYPuaR sGHaIWB+YFYA03ULJFjyOwiYfThEQVGeg4CcznoejLYX86Fsp5aADu2MAD69NFDwrXmPDwu9 RSS8L28gYbo4EgaMR2BzeBFBv6mDB5v6SgoeWY0UzOVNI7D2zZJQkV2MwNRt44Njy0BFnsZt DZ95uKt8SoCN5nT8ot4f62xWApsbCyhsXisV4MkJC4WHHjtI3NVp5+Gi3GUKr85/IfFK9ziF TW3jJB4x9guw3XwimrkpDE/gkhQZnDoo4pZQXrO0glJWAzVLr/cEWqT10yFXmmVC2fnvtXwd og94yH7DqSnGj7XZtgknezAhrH12kNQhIU0wy3x23uDgOYfDzHX2g60COZlkzrDZ+r0DFjFS di5nmPrXP8k2tb4lnH3Xff9uMt6pxUwYu1JoQs4my2wIWIduifh378X21NvIEiQyIpdGJFYo M5JliqTQQHmmUqEJjFclm9H+a+vu/47tRGujMb2IoZHETYRbw+RiviwjNTO5F7E0IfEQ5VyW ysWiBFlmFqdWxanTk7jUXnSMJiVHRec27yWImTuyNC6R41I49f+VR7t6a1HshPt0y06Qy0XV +dKrFaq46jF/fbSr8GlhS+jGGx+rNYpW50sTfJoCItYPbb2y1P2aOitbKbrt5dnXICwoXizQ PZi6cPdnT3+U5/M5/amY3LIr2ilL8O6f4/q+ymqNZcSUkuXrrlMlKulLvmz4ribXVPckZ+za j3VRSXriXJ5NQqbKZSH+hDpV9hcG4DUc1gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAAzWRa0hTYRyHe3fOzo7DyXGJHkwIF6ZYmkban5SSinypkD4VFJVLj224TdlU vJDNC0nzVtmH0gkL8zYXExUvYRbTvGRQqJNl3thS/JBT00SdYS7o28PzwO/LjybEDaQ/LVdl cGqVVCGhhKQwIaYojJcZLYto3g0BvdlEQctWNjTOd/NBb+xEsLH9XQDrA0MU1L3aJED/pZiE 3+YdAhYG7QKYa1gkobekiwB75TAF5cUuAgq7m3jQXzvCh6+dFXx4vlNPQJd2XgDjb/UUzJr2 +LBoKSdhpLqZhLmKOBg0+MLm6E8EA+YuHmyW1VJQNWagwFE8h2Cs305CTUEFAnOfjQ+uLT0V J8Edzd94uKd6RoANbZm4vSkU62xjBG4zPqZw269nAjw92Uvh4RcuEvd0r/NweZGTwmsLUyRe 6bNSuG5plYfNHVYSfzYMCK553xTGJnMKeRanPnE2USh7vbyC0tfCs5ff7Qm0SBusQzTNMqfY 4fUEHfKgKSaYtdm2CTf7MJHsun2I1CEhTTBOPrugd/Hc4SBzlf1kq0FuJpkgtqBs7x+LmGjW UThKuZllDrMtrR8I977Hvv84neTWYiaKXSk1oydIaEAHjMhHrspSSuWKqHBNqixHJc8OT0pT tqH99xoe7D7tRhvj8RbE0EjiKcKtUTIxX5qlyVFaEEsTEh9R4blomViULM3J5dRpd9WZCk5j QYdoUuInunyDSxQz96UZXCrHpXPq/5VHe/hrUV57WpV13CtzeuJhUHBNxG7KrbywCVeLJz4d 8dIUaBo1BTqvpNzxTQm4PqDJNxaWRpy8GBh64YjL4shNrW86aju+vBsbMs+cDxU1+pt/aOOr YsL+lCRPWtMvzR0T6O/NTs8kmLwDVI5Gv0czU86AzjNL/bcbTe/zW3wn3yi9VislpEYmjQwl 1BrpX5Rf9Ya5AgAA X-CFilter-Loop: Reflected X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 6BBD6100002 X-Stat-Signature: 6f4kodbd9tgg6jhxenffothab51grfez X-Rspam-User: X-HE-Tag: 1748399372-125087 X-HE-Meta: U2FsdGVkX1+QUy5FtKWZN2mnKQ+CqYr6X0DfU8WuwW4AO/+m0G+N5bj3YNVVv38v00W0BICNzHEeN7bb7wNQn5jxg3J3aF7Hh2bmmyVsuvMnTvX+G7Tw43bTkDnPuaQkEph2LKphbV+punphoUB0aB8q+xlDz5hzEq82UsmOotp0YhKM2jqb8VwjU69omfus+IYKRiqPTwjfZ7VluB0whOrqSsboOqMknvzcgWHaH2rxkKyF5wo1X/0qGwX/Zky4HFsOOiGBemiXqiJsJEHqJ6W3aRvrR70L+YYgRtJFal/JVdOgpDQJs4QLMZ85vhSBf+URyuGuEKAdAO6Bp5H1IMBwz80bZ6Aul1iikYHbybDPmjBrvmvTzB14pzYaTQuisU0CP9Mi14NLqiOnQNCIbZ5D5VlD0P5EmejtvygPhCxr4k8m8kJPMq17GUr9y5o4pmgRSLIbv37dNNLjzwkupB/AQqbmfcE8mObNDvocUiR0Icr2mDvyd+y8D1hlp2N9fyhbxwPdmXxczEKfWY7dGi4jvyXo3lARuJz354e1q1NXniZqWfFqCqRYiF/9HQWunfLef+LslJaR106h+7suakRiPjig6fs6h5nV5gJCreFpbv4qNIkLou0e7vmL1J1m5hzAseRdqwoMieOGU6+lzmsxlov4EZ2d1w+j972UgPMbJ378Tz037Zdu6kpdqAHuDZRbZll91N7BtgQaDtsPXXraQ06DeTgqxiSPkuGdyIHcwEGfB+re0fQNjShDfKqJzzU2BdB9Ic6d0dyEgOOi9AFXaPEcZs8+vevBOQrxp3B/DH+ZUm/j2o8/ay65q0jJiguyjYgJlnYjBeFLo13RYCOV1yK8a2IfK+Yaqneck/b753r4OYLreLW1U3GaO4qizBImxg2Oihp5WXrI27kE0TlFc+/XFl5aIxfb1HLheIpO3ElWa0vEPiBqAU5G03WnA761eb6n1QnhtcsatUP NySjcKL/ i/8hRixJfBli3BITV03I4KAJ4x22TjU4oC1rUch/yJmfDxXQTdBzXtaLzNDdsDDNGTRSq 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 --- 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..cceff435ec4a 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 = netmem_compound_head(virt_to_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..f075c1816554 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 = netmem_compound_head(virt_to_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..8663070191a1 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); + page = netmem_compound_head(virt_to_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..03f0d35981c9 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 = netmem_compound_head(virt_to_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