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 8243BC83F1A for ; Thu, 10 Jul 2025 08:28:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0DD3A6B00A9; Thu, 10 Jul 2025 04:28:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0B58B6B00AA; Thu, 10 Jul 2025 04:28:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F0CD88D0001; Thu, 10 Jul 2025 04:28:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id DF2166B00A9 for ; Thu, 10 Jul 2025 04:28:22 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id AA7DD5914C for ; Thu, 10 Jul 2025 08:28:22 +0000 (UTC) X-FDA: 83647678044.27.50A36CA Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf24.hostedemail.com (Postfix) with ESMTP id 57354180005 for ; Thu, 10 Jul 2025 08:28:20 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; spf=pass (imf24.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=1752136101; a=rsa-sha256; cv=none; b=HCyf7FH/WZ6UAHQcnm1bpfDZcWRv8TQB6EXCXmdmjR0lWebFsWmcrkuMdDgiLVkVZ+5V0O 7hB0Tk/JSqhYsANyTsglBOTJ5vsrKp16iXu3sIVtb8efAdKvNzo+HLqeFIDgOF0cEincMy UvfnskqN8/JtCF1U0oZp59GKvy02btM= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf24.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=1752136101; 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=D1my6YHXU5amzznef6rmYJe4hzJlghah0zjfSk5qJp0=; b=OXxtj5Ov7ol/soNoPLCdoSyEIsz4EQS20CFryZFk117cj1ET6bwc9lhVjrb/zX6gkeqMuf GL6wH3NV0Xt8SFOVeu2/ArONQyssiqBtT30dQLp4cf1lBkio/Kygcqz9iroKcF6v2uK+wS xfZ9KkoTMqccJOrR09UVg35Z0LcITes= X-AuditID: a67dfc5b-681ff7000002311f-e0-686f79a16ad4 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 2/8] netmem: introduce utility APIs to use struct netmem_desc Date: Thu, 10 Jul 2025 17:28:01 +0900 Message-Id: <20250710082807.27402-3-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: H4sIAAAAAAAAAzWRa0hTcRjG/e+cnXMcLU7T8mSFMRRhqKWYvUIXobBTKRRBdIMceXKjeZRp 5oxKa1Iut6IMSifMLl5niyk6u4h5m6KZacbMvKRYfTClrHmZUJvltx/P8+PhhZfCJH24P6Xk 0zk1L1dJCREu+r6qJLREk6LYap8PB6PFTEDVfCaUjdmEYKysQ/BrYYiE2VY7AY9KnBgY32px +G1ZxGCyfZyEKms8jJZ+weHl9XoMxm91EKDXujB4tTBNwlVbuQB66wxCKFh8gkF99hgJ/c+N BIyY/wjhS7Meh87CChxGDTHQbloHzq4pBK2WegE484sJuNtnImBCO4qgr2Uch6IcAwJLo0MI rnn3RlHbCBkTyLZMzWBsbcWggG0oHCZZk/U8W1MuY3WOPoy1VuYRrPXnHZL99OElwXbcd+Fs g21WwOqvTRPsj8mPODvTOECwltoBnO02tZKH1pwQ7UjkVMoMTr1lV4JIUfSjmEy955+Z196D slHNWh3yphg6ktE/eINW+MmSnvAwQQczDscC5mFfOpyZHbfjOiSiMLqaYFrNQ6Sn8KGPM/nv XrglisLpIKbtZpYnFtPbmLZXBvLfZgBT9axpWfGmoxjbxEVPLHErrgHd8iRD51LM6/Ku/zes d7MDv43EJuRViSRKPiNZrlRFhik0vDIz7ExKshW5P116aemkDf3sPdKMaApJV4l7k3iFRCjP SNMkNyOGwqS+4vljKoVEnCjXZHHqlNPq8yourRltoHCpnzjCeSFRQifJ07lzHJfKqVdaAeXt n402OhN8dIGPIxYnHJrhvWDcfPBomZ1nEnoo8+chvD2OyHnY3RmkuBZgpJsmQ50DV7bv8ftm nuMnq7sN/K5YmZY/FVw8Zpft7NRGRefe0R0o/OoVerlgrsl1Kb7pxt4QxVJjyNL7fW27+wd1 qrhNf448vbV6/+GA4p6zsQHRpJefFE9TyMNlmDpN/hfbDSqI5QIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAAzWRfyyUcRzHfe957nket249u6gHyXZNNYsy0adpxh/lWU35T5rJyTN3OUd3 x5ymXVjN4Yp+h8WM/NxxzJ3CzG9rkx+jC2EMrYn8zK8mV+u/917v197/vClMVI87UjKFmlMq JHIxIcAF13zT3Is0cdKzfWsukG+oIqByMwneTZn5kF/RgGBta4yE1Y5uAoqLNjDI/5SOw7ph G4PZrmkSKo1BMFk6h0PTIxMG0497CMhO38GgeWuRhFRzGQ/aC3r50N+g58Oz7RIMTNopEobe 5xMwUbXHh7m2bBx635TjMKn3h67Cw7DxcQFBh8HEg42sAgKeDhYSMJM+iWCwfRqHvAd6BIYW Cx92Nvc38jonSH9Xtn1hCWPry7/w2MY3X0m20JjA1pW5sTrLIMYaKzII1riSS7LjI00E2/Nq B2cbzas8NjttkWCXZ0dxdqllmGCLv/3ksYb6YTxYdFNwMYqTyxI55Rm/CIE0b7mAjH/umJTR 1Ye0qM5eh2wphj7HlOxmE9ZM0CcZi2ULs2Y72pNZne7GdUhAYXQ1wXRUjZHW4hAdymQNfNiX KAqnXZnOzGQrFtLeTGeznvy36cJU1rT+VWxpH8Y8c8+KRfvKzrAOf4IEhcimAtnJFImxEpnc 20MVI9UoZEket+NijWj/y9KU3RwzWhsKbEM0hcQHhP3RCqmIL0lUaWLbEENhYjvh5g25VCSM kmiSOWXcLWWCnFO1IScKFx8RXgnhIkR0tETNxXBcPKf83/IoW0ctOnUMDyq9ujtco12zPwrq SwdXjg98P++X48p3koaGtb5YeVt94qGXe/8vx4D1EHsRvFaH9dp4jESVvaQue80XZ5au940v +0dGVf8euWCoEmju+0Z6m2oHgu1HHaThDnfuBo05pzIpkbm1P66r5isMOdq4058bAlfCTYaA dWefPbkYV0klnm6YUiX5A2hTrqPHAgAA X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: 57354180005 X-Stat-Signature: f8qndbagrqhe7acjfgw57w4tuhch9b6i X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1752136100-968363 X-HE-Meta: U2FsdGVkX19Zjjp8u9BuVDZnQC2svs0PZTZm/YJwdkJoV12ZXmZUpSwPbUI43G7qP+hjygzWUPd0Rs2WpqaPr0bmT/6HE5gQvzg8EBUDEuxP6gwFx3hmMaG2dJu5XTpdcs1+vEFwo6k7neQdVF8nFhmrlJ+ZR1nvlziac9bDomrOLJKCzpxD9t/kaf/ochO5Dlwv7ZPKc5zkhi+eF6pOOe8wVFkgMyarun/Y84hIkL8Tf/w5Ogdn3tm0n/vXl91awEG5Ae6E77SwsvCC5Xp4Axm9dhRlUQVvd2eAKNWnlNqUK0r/li7Y/KDCwR8/qbGJf4P/GpwzPa4oRxolNDYHT8gmWm1Okf2bgraXgepG1eJ746K7XWTCUTZOJyOspGdbv/kTP4T2tc7HPSaxS9tcl2lt8oihAB9EttcAmxjZz6xx16Tp4n8ZN0s/9lI1FCPEt48dfgT93BUzSyZ1A97IvJIFSUu/Pm2dRWDuB4mdlTi8m5S7xHy3fYNN1wZIOx9PCCMoX9nys1xds8yLQmX9uFWc3OdEffKkR4KfkIvlcXdGy3JX573wQpF/gQqyX+Edj+W91YTmeu4CeZgoZUxoiqTrMd7A3a0WcEtxTb6+1Qd9PuiCzMZJRNRoAK2CeuItworP4dGdctsU42cDBcyiaoFC0DIW+V67ogiQrXrZtMEGYBxiGHNLWM7TJrl7dqZCE+17bN+EHd7TRi1xMGdxG0DRp9HuRCZB4dhuAufTWnxaKdOEFjcDpkmqykmb4kqq/9j6o/vC54aWyrxq1bJJWQR4+zvoVpfpJobsyxafIBdLahfZyui2ZHPkDSTOafKccc8gUpjiL3fYPTtQYlnaUSaKvB1e5lvZ+qe+r9cg+DS/phw5HvmGKfSjQt5ESa/l0v+eJKP98A+tuz3NB1u3LkqzC8QI19gYFYDHxJF1B/Cpw0RTWJ18+GtSI9WUp9jgRjIV6NO4iCnw3omxTPv vVUDGnAy Qr7Ck9e1ZSHJm2BJg0KrLMJS3D5JnUS1SwGL15APeGUnHAAvLe3VnR1zAvr80OTd6BkugXZTx1I5vjGyQGckFIc8gEQ== 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 eliminate the use of the page pool fields in struct page, the page pool code should use netmem descriptor and APIs instead. However, some code e.g. __netmem_to_page() is still used to access the page pool fields e.g. ->pp via struct page, which should be changed so as to access them via netmem descriptor, struct netmem_desc instead, since the fields no longer will be available in struct page. Introduce utility APIs to make them easy to use struct netmem_desc as descriptor. The APIs are: 1. __netmem_to_nmdesc(), to convert netmem_ref to struct netmem_desc, but unsafely without checking if it's net_iov or system memory. 2. netmem_to_nmdesc(), to convert netmem_ref to struct netmem_desc, safely with checking if it's net_iov or system memory. 3. nmdesc_to_page(), to convert struct netmem_desc to struct page, assuming struct netmem_desc overlays on struct page. 4. page_to_nmdesc(), to convert struct page to struct netmem_desc, assuming struct netmem_desc overlays on struct page, allowing only head page to be converted. 5. nmdesc_adress(), to get its virtual address corresponding to the struct netmem_desc. Signed-off-by: Byungchul Park --- include/net/netmem.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/include/net/netmem.h b/include/net/netmem.h index 535cf17b9134..ad9444be229a 100644 --- a/include/net/netmem.h +++ b/include/net/netmem.h @@ -198,6 +198,32 @@ static inline struct page *netmem_to_page(netmem_ref netmem) return __netmem_to_page(netmem); } +/** + * __netmem_to_nmdesc - unsafely get pointer to the &netmem_desc backing + * @netmem + * @netmem: netmem reference to convert + * + * Unsafe version of netmem_to_nmdesc(). When @netmem is always backed + * by system memory, performs faster and generates smaller object code + * (no check for the LSB, no WARN). When @netmem points to IOV, provokes + * undefined behaviour. + * + * Return: pointer to the &netmem_desc (garbage if @netmem is not backed + * by system memory). + */ +static inline struct netmem_desc *__netmem_to_nmdesc(netmem_ref netmem) +{ + return (__force struct netmem_desc *)netmem; +} + +static inline struct netmem_desc *netmem_to_nmdesc(netmem_ref netmem) +{ + if (WARN_ON_ONCE(netmem_is_net_iov(netmem))) + return NULL; + + return __netmem_to_nmdesc(netmem); +} + 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))) + +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)); +} + /** * __netmem_address - unsafely get pointer to the memory backing @netmem * @netmem: netmem reference to get the pointer for -- 2.17.1