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 816D5C54F30 for ; Wed, 28 May 2025 02:29:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0020E6B007B; Tue, 27 May 2025 22:29:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EF4B46B0082; Tue, 27 May 2025 22:29:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E0A9A6B0088; Tue, 27 May 2025 22:29:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id C28E26B007B for ; Tue, 27 May 2025 22:29:25 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 6C68D1D6595 for ; Wed, 28 May 2025 02:29:25 +0000 (UTC) X-FDA: 83490735090.20.C726975 Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf09.hostedemail.com (Postfix) with ESMTP id 0AA7014000A for ; Wed, 28 May 2025 02:29:22 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf09.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=1748399363; 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=jgka1kwlGj6Lf0P2UhO5O2vskVwV/bLM5z82Mxn+RK8=; b=bhI+2Nme7altwDs6tNh32cik1pw5Avqsvkix9E8n7cc81KQ0+XmdrRAPaDzAe/SIjXdu2e wBKOLWUEkgHdx51z9sV+Ug1VQL5RbU8yqvW3SLazIO3z5rTUpDIVXOU70dCxTieDZZ27Bn uGZb+1jrcvlO552IUUiQEML+BbvnhEU= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf09.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=1748399363; a=rsa-sha256; cv=none; b=LlVAwdJyDy7v8j6YT0NAGYDIwES/DoclOeB7/eL6drQnH6J6n095ueUyuxGDN91ARiu2Ft tFV8pSV9iDwA0mrI4heaR5ljLolRVlGELNzTrpqI3jePyIHPX4ijUBnn5mPYEBvyemOFl4 Fma2F5cR1EPD+pFWxAAlowRKwPC8C3M= X-AuditID: a67dfc5b-669ff7000002311f-20-68367501dd61 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 01/16] netmem: introduce struct netmem_desc struct_group_tagged()'ed on struct net_iov Date: Wed, 28 May 2025 11:28:56 +0900 Message-Id: <20250528022911.73453-2-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: H4sIAAAAAAAAAzWRf0yMcRzHfe/53nNPt45np/Fgfp1hjLhW7TNEG+M7tthaWObHs3q4Z+qy S+cyJie/LhejGbnmiFQulytdLI3rIjmTU3aUalFqI3TcuGvDMf+99n6/9v7nzVBKF57MiNq9 gk7LZ6hoOZZ/iry6EOXEaxZbnHPAYrfRcPOHAW701kvBUlmH4NvPThn43Y9pKL0SoMDyPB/D d3uQgv5HfTLoKRvA0HDcSUHf6RYazPkhCoz15RJoqyuUQlHwOgXOvF4ZvLxnoaHb9ksKAy4z hifFFRh6ChPhkXUCBJ5+ROC2OyUQOFVCwzmvlYZ3+T0IvE19GC4dLkRgb/RJIfTDQifOJLUV ryXkbvFbGbE6ckhN+Xxi8nkp4qg8SRPHyFkZ6XrVQJOWCyFM7tb7JcR8ZJgmX/vfYPK5sYMm 9toOTDxWt4z4HdM2sKnyZelChqgXdIuW75BrvhztxXtejDeM2G7jPPRqnAlFMBwby5lqqqn/ XFB77S/T7FzO5/v5l6NYNefve4xNSM5Q7LCU67eEJCbEMONZkRt9vzGMmJ3NVX7lw7qCjeOq Lt7B/yanczerH1BhJYKN55q70sKx8o/yucCOwosc+13GDbZ7pP/8SdzDch8+gxRWNKYSKUWt PpMXM2KjNbla0RCdlpXpQH+eLTs4uqUejbQluxDLIFWkglTHaZRSXp+dm+lCHEOpohTGFfEa pSKdz90v6LK263IyhGwXmsJg1URFTGBfupLdxe8VdgvCHkH3v5UwEZPz0LFh784ja9pWvVWv H1vTrs/xpNio2CV1SfmU76VxgeLEvG2NdYGiwYS166rTU7rvKw9dnjH6S7l1s1FtaBKTHw41 T410PxM7WjcnrFz6MRjjnDWkTqKLdsYYxFrbOfc9rpQPjonObKU7q1LZD5sCzHlvnMd8YLXG 8PzWqoQGW4kKZ2t49XxKl83/BkHDRoHVAgAA X-Brightmail-Tracker: H4sIAAAAAAAAAzWReUiTcRzG++397d270fBtSr2ZUKxSMLQZKV+wUijtZ4HZZVBSDn1xw5NN RaPAPJC8sgPymLHyyCtm5p1IqHlkpHllqWlTR3+Id8OLzBX99+F5Pjz/PAwlK8a2jDoimtdE KMPktARLfN2TnFCMm0phKtsLOkMlDRWrcfByskEIuvI6BCtroyJYbu+kofC5mQJdbzKGX4Z1 CmY6jCKYKDFhaE6tp8D4oIuGzOQNChIbSgXQVtAthL66LCE8WS+moD5hUgQDTToavlduCcHU momhO68Mw0SWJ3Tod4O5ZxZBu6FeAOaMAhoe9+tpmEqeQNDfZsSQfy8LgaFlRAgbqzraU05q yr4KSGPeuIjoq2PIm1JHkjbST5Hq8vs0qV56JCJjw8006crZwKSxYVlAMpPmaLI48w2T+ZYh mhT+XBAQQ80QJh/17SK/XdclJ4L5MHUsrzl6KlCiWkiZxFGfreOWKl/jBDRslYbEDMce59Jr iigL06wDNzKy9pdtWBdu2diJ05CEodg5ITej2xCkIYaxZtXc5rS/BTF7mCtfVFp0KevKvcqt xf8m93MVVe8oiyJm3bj3Y0GWWLatzKcbUDaS6NGOcmSjjogNV6rDXJ21oar4CHWcc1BkeDXa Pq/k7ubDBrQycLYVsQyS75SSKleVTKiM1caHtyKOoeQ20kQPN5VMGqyMv81rIm9pYsJ4bSva x2D5Hum5a3ygjA1RRvOhPB/Fa/63AkZsm4D840+KUSAjHnj6wid78AdzzFxgdabR26bMNqTp gsotc8b+YKL5xsqRmwGJo299n80p7ArttryKvAdTF3OiBzzgw/Jlrysmxna176pfCnvoi7eP wmH8QLJ9T/esy1Tp6QT32kLZnbaLlz6t5S+lu9AETfdk5CpGTb0Bv4m10Om8HGtVShdHSqNV /gGEuav7uAIAAA== X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: 0AA7014000A X-Rspamd-Server: rspam09 X-Stat-Signature: yomwcnob18g5r4rfurqh8pscz4x8z5nq X-HE-Tag: 1748399362-972079 X-HE-Meta: U2FsdGVkX18Qt+8tjsainL34S6pjgyTRDP3ZY531q9nVaxs0aOQzgycDW5FKTdtog9tqDXreV4JxRHG5t/rjb90ND4dU2EpvjEvJwod0ZV7XaR0VDqqgxjNTuwR8fVtfB5Fb4sJxx1qFcNl1sQMWMzIRBC/LCY7ZJVi6+htiMDEVzTifX7VM1JHGAa29THz8PLQzTOFzdhEtjAg4QZssw+alVhbNlZAScoUpuE5BDDSQFv6PNrRt/YiUSo5H1Hb5l9trWsYJkbUl/dcHPdNt5UmhNcHkOK40reuTe1k4bNKQ/6mQby5uzoE44swiUAwRIfYdlV1+HqZ0GmJhhr5KPV8mAlJ7bY6ic7TvlIuwnfIFmfTiA7nDHXmmTt2KhokHgNTKssyZ5p2LJwvNPQBWILU8udDpoyeJiv9THzdkQT5ltbhWOIpmcPz8k75ucX+/w7rI5GbMZQMVfWgN9Lu3mBmb0a2krm6pta++wlFh1dqjlbun7YW5Qok4s4ngTOIV0RoC/mTVMs9o7QL4H+8lfAjY6XGgdRHRQtZP/WJ0aaLy6nykuGCxqwQZG/FByXsC5r7yOKyOVwZr9IwdnXzTAww4Q4aNtmErmTGoX4ljMYJokzWcgi7vxgQhwFCIKjF8JQOM/4YiuHdNPRRLRQYDvAhMq+BnbZFAt2vVcvFsmQSQGxqY73O83P7iUdsxnNCSR5piceZPTFrcdPItgXvTzt6TxUTp5f0EEFcNoRL2Es/69b3l+ii7PkHMrX9PGYWSljj6WiWLXDqgo8YCatzNrX9dsK5I1gqoga8vgTi9ESS0a+QLdXIX/xLYs6Jn+JB9E/Y6yZvQrpl5I1vIOGRJWZRvyHABceNXzn7nSdn+OtT68DmI/31rgCDLt20dz64E9W+wzalNOKEhyUb8UA6EhxyFlHStulm9M20HiZj//8Qp7HPbVx0nhCdbFHJX5HJiwkrX00sKty8kEDc/psC dqVs2iex l2tAd4zi0j9wjy+PxAHZUmV3DWEAKLriS9qzInZLrAsXTQgKLm2yEg76LeKtjAPtYnl3JLBh1a8GBtxCTeUNcPY4j/RH/jGaojKy3vvEG37GG5bP5Ef67Yylh/TYFRuQ9IfrggFpj1rWWo6VLPyRnkoQoiw== 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 page pool members of struct page should be moved to other, allowing these members to be removed from struct page. Introduce a network memory descriptor to store the members, struct netmem_desc, reusing struct net_iov that already mirrored struct page. While at it, add a static assert to prevent the size of struct netmem_desc from getting bigger that might conflict with other members within struct page. Signed-off-by: Byungchul Park --- include/net/netmem.h | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/include/net/netmem.h b/include/net/netmem.h index 386164fb9c18..a721f9e060a2 100644 --- a/include/net/netmem.h +++ b/include/net/netmem.h @@ -31,12 +31,34 @@ enum net_iov_type { }; struct net_iov { - enum net_iov_type type; - unsigned long pp_magic; - struct page_pool *pp; - struct net_iov_area *owner; - unsigned long dma_addr; - atomic_long_t pp_ref_count; + /* + * XXX: Now that struct netmem_desc overlays on struct page, + * struct_group_tagged() should cover all of them. However, + * a separate struct netmem_desc should be declared and embedded, + * once struct netmem_desc is no longer overlayed but it has its + * own instance from slab. The final form should be: + * + * struct netmem_desc { + * unsigned long pp_magic; + * struct page_pool *pp; + * unsigned long dma_addr; + * atomic_long_t pp_ref_count; + * }; + * + * struct net_iov { + * enum net_iov_type type; + * struct net_iov_area *owner; + * struct netmem_desc; + * }; + */ + struct_group_tagged(netmem_desc, desc, + enum net_iov_type type; + unsigned long pp_magic; + struct page_pool *pp; + struct net_iov_area *owner; + unsigned long dma_addr; + atomic_long_t pp_ref_count; + ); }; struct net_iov_area { @@ -73,6 +95,13 @@ NET_IOV_ASSERT_OFFSET(dma_addr, dma_addr); NET_IOV_ASSERT_OFFSET(pp_ref_count, pp_ref_count); #undef NET_IOV_ASSERT_OFFSET +/* + * Since struct netmem_desc uses the space in struct page, the size + * should be checked, until struct netmem_desc has its own instance from + * slab, to avoid conflicting with other members within struct page. + */ +static_assert(sizeof(struct netmem_desc) <= offsetof(struct page, _refcount)); + static inline struct net_iov_area *net_iov_owner(const struct net_iov *niov) { return niov->owner; -- 2.17.1