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 BB4B5C7115A for ; Thu, 19 Jun 2025 09:33:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 48FDE6B00B3; Thu, 19 Jun 2025 05:33:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 440C16B00B4; Thu, 19 Jun 2025 05:33:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 308696B00B5; Thu, 19 Jun 2025 05:33:03 -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 1FF7B6B00B3 for ; Thu, 19 Jun 2025 05:33:03 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C27311408E5 for ; Thu, 19 Jun 2025 09:33:02 +0000 (UTC) X-FDA: 83571636204.15.0799E76 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf16.hostedemail.com (Postfix) with ESMTP id 31C25180006 for ; Thu, 19 Jun 2025 09:32:59 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=PnJL+4Xw; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MwZ2oQJj; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=PnJL+4Xw; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MwZ2oQJj; spf=pass (imf16.hostedemail.com: domain of vbabka@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750325580; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Vq7+Feq2Bf80aTBO3jzKLagOMj9i5wqnEfSZrRgD8Aw=; b=pdSdQc880xxxvk66D2WPgezEvVgxCOWu2TBF7O0lM9lfXeFOmx8WGzp/1dsGseSy3Tn0vO DhcWA6CLt4emA5Xg7dypfsvJ++2UMkyq7in6mdMmsANC9H+Gjr7JZbJtomUIRItMTGzRWg ns9/JFTdkBjflHw1N+l9uYHu1X6GgHA= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=PnJL+4Xw; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MwZ2oQJj; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=PnJL+4Xw; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=MwZ2oQJj; spf=pass (imf16.hostedemail.com: domain of vbabka@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750325580; a=rsa-sha256; cv=none; b=4Lla04SbnM5FCmKCIXIYyAbJl3mS5v9I60GLrMrSkqqjOlzsBiTbGksYtxw+puHSrskziW aJbNUfMHlUYDZXe5OshiJjTagjal9HgzGm2le9fZM65tE88kPy8hukyuPcKjE+HTzBcULe cSXFrxb5yUbQ/MB6ilmQ2w1bBcXiruQ= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 573D7211E3; Thu, 19 Jun 2025 09:32:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1750325578; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=Vq7+Feq2Bf80aTBO3jzKLagOMj9i5wqnEfSZrRgD8Aw=; b=PnJL+4Xwph4O9a/0t9Da9zyBMc1ZBasML78CV42avpock3aOCFyoMjign8A6f9YP7L63ni a3zGfbjWAQY2kNCD/oxlAvNF19dhhlyiXU49nAiOhDo+clqkW/6LnA6Ncof6COMkcwGOsG MrOvtUHKjapEFa3MtVBRWozI70A/Igs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1750325578; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=Vq7+Feq2Bf80aTBO3jzKLagOMj9i5wqnEfSZrRgD8Aw=; b=MwZ2oQJjTLk/VSqYNeGXAabXg3kRkrWBe4zaGKeqrAWPDCcolvq6A633qee4ubb4dWSOuT U51jzQYsFXF9HfBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1750325578; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=Vq7+Feq2Bf80aTBO3jzKLagOMj9i5wqnEfSZrRgD8Aw=; b=PnJL+4Xwph4O9a/0t9Da9zyBMc1ZBasML78CV42avpock3aOCFyoMjign8A6f9YP7L63ni a3zGfbjWAQY2kNCD/oxlAvNF19dhhlyiXU49nAiOhDo+clqkW/6LnA6Ncof6COMkcwGOsG MrOvtUHKjapEFa3MtVBRWozI70A/Igs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1750325578; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=Vq7+Feq2Bf80aTBO3jzKLagOMj9i5wqnEfSZrRgD8Aw=; b=MwZ2oQJjTLk/VSqYNeGXAabXg3kRkrWBe4zaGKeqrAWPDCcolvq6A633qee4ubb4dWSOuT U51jzQYsFXF9HfBg== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 198BE13721; Thu, 19 Jun 2025 09:32:58 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id owniBUrZU2hQSQAAD6G6ig (envelope-from ); Thu, 19 Jun 2025 09:32:58 +0000 Message-ID: <6a7f0976-f35e-4e5b-a77d-fbf6509a4ee4@suse.cz> Date: Thu, 19 Jun 2025 11:32:57 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net-next 1/9] netmem: introduce struct netmem_desc mirroring struct page Content-Language: en-US To: Byungchul Park , 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, 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 References: <20250609043225.77229-1-byungchul@sk.com> <20250609043225.77229-2-byungchul@sk.com> From: Vlastimil Babka Autocrypt: addr=vbabka@suse.cz; keydata= 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 m6M14QORSWTLRg== In-Reply-To: <20250609043225.77229-2-byungchul@sk.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Rspamd-Queue-Id: 31C25180006 X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: g1rqtzhpd39mowg357zgkkbsu9su33je X-HE-Tag: 1750325579-42102 X-HE-Meta: U2FsdGVkX18oRDmfK+ykRRhQiaiGdVc1Ar37QDOq1LU00kd+H8ILdXVN5txuNDlv8KiyLfH1gNZQ/SV5BoPWzAzz1exHqNu/XbLf17XYHkq0ugBByrWEJs+AZW9kVyVIT4pETssoCpbTl8b0olt1j0uzGgzJOAeMYjnvZ8jh/fGB+gXbIf4nl7ahehoV8d9MFQxjPlGaa+Vz82r2FAepac8lCAEzvvdHptyvmvk2RNA4GjQf/JpNcSLbhRDfzihCGju4lQgIH22Jn0OQWYJbfAUC1XBYkSgbHpvc3K9yYIL6GouEoTCyZDxV6NmyklE7WbJ7wLbXaHjaK8JeoAd96rmuXbu4jS2PaY1X4DqGVyI1eERBobqeIqaUJsn1mcKxOvapaqNQXxEIKssBwgoqAmALPy4reMnAbmO12CNzzzhBEBnvii4dRvbEHL2fUvBaHzxltJMWur1BvCSkY/OLXj1iG/JVecm9Y/BhiGnEDsucQEVWn5eWY2X+FEKk8xpNWVQAcPwzn6o/3uuKC1eHqJMG4j0uHfF9YddSEoXri2m6++yoXS+qXWEOcGTXkvDQiKeixuU+4EvjlNGdW1Sh+LQZqg2h/3VopIjw9/JXvCLJhVuR1aNmV5TSDLBBMNniczKHmhurmDJ4LhK+xqdugKaMt2gbi890Fe78bUUwNASsuAY0AhhtUIQclftpmlAgax2y/+OfDbrvKVmeBeut+bv6xBHXF6j2VlPm0qfajo8O0+HDF1McP08savlLnXKQ+TAW6+g0OT+2YPY8f8ypHwQwTZy6EpwuZhhMOSLUwC16limztIfhDy5AAzbWnuSp2diGHJBfkpz9mNW0tzxpja1J+xWtzMXgacUIbsdHHYw6ZpADgG10j9KJPlYgPyVBVVfpas3bFLSV+tB45BpgccRiK+VGLhtpS59mqExLuAlkI1f/2c+dauvIJUoawhpzcFhZIZBYZc88gP9S592 hAsHPzeS PHH1inPvdpwEpACLvO/nNfUVjuBCtCVxu8FaWL9g5kBoGZzMvcyJ1lALHbua/JnWjNGIX9mdRjIFZgG9QNFj30RD1ER3VPK6nkygIbr1AnHoxDTG76ziufeA4grmDkA8jY5eFXJz7jNdFB6744ZjEbBDOj7WwqiErzy5T++Z5sp3ooHXjfOSiIHIG8CHDkzOPXU+QGw0Vtpz0BZes50VRQWmKKIbO+g31RuRMeJA7NM9HN1crVTMgUQ0WshCJwO12X5ocU1Gm3h6uWppcONfVXah9XxRG3+BcffwcdBqUB5BzpbWolNj2oERg9q88GgNxcorWJoZH/N+99iC+wzXViFWZGu1Z5c3Rv3xocS0cqryU0lmG8kAqwj9QEB6hMFwLvN8UZUH5Tf1B2mHfHcFaKQORO2m4bhpDe7KoMaWKRdb3p7ZskPcue9CQHv5TUXtqXGXkner9OM4Xc12ILjPzjLiyucdoVnN7O0GWzTvGgHzacfF38gyG5fGOlNreml4tV9vuoakyUo6WCMdz7gmJZ4MSztNA+Z6GnBacOrzEzl0hayd6Aobl2I2f/Ak0S0NyRrPH 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: On 6/9/25 06:32, Byungchul Park wrote: > 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, and make it union'ed with the existing fields in struct > net_iov, allowing to organize the fields of struct net_iov. > > Signed-off-by: Byungchul Park > Reviewed-by: Toke Høiland-Jørgensen > Reviewed-by: Pavel Begunkov > Reviewed-by: Mina Almasry I'm not willy or David, but I believe I know enough about the memdesc plans and as I worked on the struct slab, can confirm this goes in pretty much the same direction, so looks good to me. As for struct net_iov I trust the networking people know what they're doing there and it seems to make sense to me too. Reviewed-by: Vlastimil Babka > --- > include/net/netmem.h | 94 ++++++++++++++++++++++++++++++++++---------- > 1 file changed, 73 insertions(+), 21 deletions(-) > > diff --git a/include/net/netmem.h b/include/net/netmem.h > index 386164fb9c18..2687c8051ca5 100644 > --- a/include/net/netmem.h > +++ b/include/net/netmem.h > @@ -12,6 +12,50 @@ > #include > #include > > +/* These fields in struct page are used by the page_pool and net stack: > + * > + * struct { > + * unsigned long pp_magic; > + * struct page_pool *pp; > + * unsigned long _pp_mapping_pad; > + * unsigned long dma_addr; > + * atomic_long_t pp_ref_count; > + * }; > + * > + * We mirror the page_pool fields here so the page_pool can access these > + * fields without worrying whether the underlying fields belong to a > + * page or netmem_desc. > + * > + * CAUTION: Do not update the fields in netmem_desc without also > + * updating the anonymous aliasing union in struct net_iov. > + */ > +struct netmem_desc { > + unsigned long _flags; > + unsigned long pp_magic; > + struct page_pool *pp; > + unsigned long _pp_mapping_pad; > + unsigned long dma_addr; > + atomic_long_t pp_ref_count; > +}; > + > +#define NETMEM_DESC_ASSERT_OFFSET(pg, desc) \ > + static_assert(offsetof(struct page, pg) == \ > + offsetof(struct netmem_desc, desc)) > +NETMEM_DESC_ASSERT_OFFSET(flags, _flags); > +NETMEM_DESC_ASSERT_OFFSET(pp_magic, pp_magic); > +NETMEM_DESC_ASSERT_OFFSET(pp, pp); > +NETMEM_DESC_ASSERT_OFFSET(_pp_mapping_pad, _pp_mapping_pad); > +NETMEM_DESC_ASSERT_OFFSET(dma_addr, dma_addr); > +NETMEM_DESC_ASSERT_OFFSET(pp_ref_count, pp_ref_count); > +#undef NETMEM_DESC_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)); > + > /* net_iov */ > > DECLARE_STATIC_KEY_FALSE(page_pool_mem_providers); > @@ -31,12 +75,25 @@ enum net_iov_type { > }; > > struct net_iov { > - enum net_iov_type type; > - unsigned long pp_magic; > - struct page_pool *pp; > + union { > + struct netmem_desc desc; > + > + /* XXX: The following part should be removed once all > + * the references to them are converted so as to be > + * accessed via netmem_desc e.g. niov->desc.pp instead > + * of niov->pp. > + */ > + struct { > + unsigned long _flags; > + unsigned long pp_magic; > + struct page_pool *pp; > + unsigned long _pp_mapping_pad; > + unsigned long dma_addr; > + atomic_long_t pp_ref_count; > + }; > + }; > struct net_iov_area *owner; > - unsigned long dma_addr; > - atomic_long_t pp_ref_count; > + enum net_iov_type type; > }; > > struct net_iov_area { > @@ -48,27 +105,22 @@ struct net_iov_area { > unsigned long base_virtual; > }; > > -/* These fields in struct page are used by the page_pool and net stack: > +/* net_iov is union'ed with struct netmem_desc mirroring struct page, so > + * the page_pool can access these fields without worrying whether the > + * underlying fields are accessed via netmem_desc or directly via > + * net_iov, until all the references to them are converted so as to be > + * accessed via netmem_desc e.g. niov->desc.pp instead of niov->pp. > * > - * struct { > - * unsigned long pp_magic; > - * struct page_pool *pp; > - * unsigned long _pp_mapping_pad; > - * unsigned long dma_addr; > - * atomic_long_t pp_ref_count; > - * }; > - * > - * We mirror the page_pool fields here so the page_pool can access these fields > - * without worrying whether the underlying fields belong to a page or net_iov. > - * > - * The non-net stack fields of struct page are private to the mm stack and must > - * never be mirrored to net_iov. > + * The non-net stack fields of struct page are private to the mm stack > + * and must never be mirrored to net_iov. > */ > -#define NET_IOV_ASSERT_OFFSET(pg, iov) \ > - static_assert(offsetof(struct page, pg) == \ > +#define NET_IOV_ASSERT_OFFSET(desc, iov) \ > + static_assert(offsetof(struct netmem_desc, desc) == \ > offsetof(struct net_iov, iov)) > +NET_IOV_ASSERT_OFFSET(_flags, _flags); > NET_IOV_ASSERT_OFFSET(pp_magic, pp_magic); > NET_IOV_ASSERT_OFFSET(pp, pp); > +NET_IOV_ASSERT_OFFSET(_pp_mapping_pad, _pp_mapping_pad); > NET_IOV_ASSERT_OFFSET(dma_addr, dma_addr); > NET_IOV_ASSERT_OFFSET(pp_ref_count, pp_ref_count); > #undef NET_IOV_ASSERT_OFFSET