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 199FEC4708E for ; Thu, 5 Jan 2023 21:47:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25ED794000A; Thu, 5 Jan 2023 16:46:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2122C940007; Thu, 5 Jan 2023 16:46:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F2D8594000A; Thu, 5 Jan 2023 16:46:49 -0500 (EST) 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 D81A1940007 for ; Thu, 5 Jan 2023 16:46:49 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 79FE61C496D for ; Thu, 5 Jan 2023 21:46:49 +0000 (UTC) X-FDA: 80322080538.14.CA1BBB5 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf05.hostedemail.com (Postfix) with ESMTP id 13080100002 for ; Thu, 5 Jan 2023 21:46:47 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=q7k+00bM; spf=none (imf05.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1672955208; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SzDRrsXgDJhap3jby0wPlv8T8HARZ8t50vYyZr9tEvo=; b=6SKWmLR7lh13tYwTBGdS8U1b4Sd69ydRdtL1E0u4wtwpA+YD8DolvXzn9Mipuqmo6/ffzI g8JKEP0dfdmN7xGQRzyUj7iMRsw72athgSWnDd/DkW0QFf1GBOoPTbPXRSdW+isprLUs+y NnrjrvHbyaYyUHe0eP7VzbR19s4E/YE= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=q7k+00bM; spf=none (imf05.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1672955208; a=rsa-sha256; cv=none; b=4Xa4lM7Q+TOVRvuNLiZq3v85k+v+1OvdHubs0LBc8cD4RHt4V0ZqIhF/Lmfo6VdUZfLOUU d36FcohsLrBR5z/C2E5HwTDikYmN/iXPCaXMxDWAOXBxn3QAo0dKIcoeNbfNLrz2aPTLch dm5d/73ttGaKOZJfxS6oBIckIulB0QQ= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=SzDRrsXgDJhap3jby0wPlv8T8HARZ8t50vYyZr9tEvo=; b=q7k+00bMqQWBUn2Lf0bv4bJwXD 6swjdyPvVKKoWeIYVVLH4QmEqbBZNMw6Uk+B7jpBAhCbzLUzzypQBbV4JJ88c9PktGsCNLP1ydeEU mZBrFAKM1XX3ztoU55B9vuFbwhx92rB7wbDr5a9wUKTsC+C3N4fbMK2ARdp79aIlbjav4Ub6MZpmY R4xb05PCFugsvoEnPBojXU3wpqpJiGZdIdA4QwED4d9/ANiUdDISs6fp3HLDHzb4R9ZuB3Rpkpqua MV/Jy0ef48o4x13gULbDgbWHszy9Hm3S6GVp/pHNhbGe24ShFpuSNveYik7XQOfqRtbevwYyu7vfk Tl+T+mVA==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDY4H-00GWmv-At; Thu, 05 Jan 2023 21:46:33 +0000 From: "Matthew Wilcox (Oracle)" To: Jesper Dangaard Brouer , Ilias Apalodimas Cc: "Matthew Wilcox (Oracle)" , netdev@vger.kernel.org, linux-mm@kvack.org, Shakeel Butt Subject: [PATCH v2 01/24] netmem: Create new type Date: Thu, 5 Jan 2023 21:46:08 +0000 Message-Id: <20230105214631.3939268-2-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230105214631.3939268-1-willy@infradead.org> References: <20230105214631.3939268-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 13080100002 X-Stat-Signature: 1xm36tqjnijqc4r14rkae48u4taftgxh X-Rspam-User: X-HE-Tag: 1672955207-190962 X-HE-Meta: U2FsdGVkX19RHFfIyIf5DEEaZOK97I1IRKG+xIQFxsukkkgUXVeXXFZeYXdvUo2gPqh0s7KFp+ujdRZ34FzqHTQhf2IrMs5WCNJg0C07lMMWB6hI+DFhyu+FmueHaxVMOuWNqD9fmF2c0Kyl8NAJHtLU/sRZxp6VCF0qwq7Zd9568anNafrCSH5c3fpG72YlK8BsqXA/S1SKKOFDz82s8RlGunNoznamFf6k42W9y8jyKvZlDgDliLO1vjvla21fpk8cX2++cH4Rf18g9Yn2mHk+PwdUP9JcL1xirAALm7BE0/I4aaFy8dm3rSS7ldbtEemGw8uYJUMMG5yZD+zH71stN9qEmhL7smXMna2c/NBIY7qp/4q2gkfwkv38Hc2R6ZXYM2AFMe9S2bFqSeIQvOOqlnqke+hwdrK9gFMTKmrUzZGMXpobY7fGUXERTybURLg/boSguZAJvcOlNygYAPI1AFG0odUsw+GVZh94bVkYjEl728IEenT7eN9+uYeuo6K11KICGAlFKEe372xgR7GyKAxLxMeZG5kUCEgL+1QwjWHL/EAJpG6GKrgbjpT8+pEkaHfbNsEn3nycjH1jjXeOIA6IhVUM++k2nhEFmi5zNW8CJcQQWkjIQaz9uHfIPXdLzR+AuERHduD2TXbMv4wTktOC+MHEY4v/oZQqp02fUmdaN2F+vLR09ei4c+urIo2GNizo0u9/zThU5+ydZGsglyWDbxasfY2RCd0JqDjNxfB/Ov5kQY8HZ+uDZsL1dv/PW11uFWWOI6jBWWBeytceNIHOX+c3TiwD6QxZehYaGIVgOEMPJzPENeNudC99ORC8bq6IYya4IwlAwbZxMFrSlceaUeTf7Y2GNKdRSBRKqjAn0euu5A1yELJa2uPG 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: As part of simplifying struct page, create a new netmem type which mirrors the page_pool members in struct page. Signed-off-by: Matthew Wilcox (Oracle) --- Documentation/networking/page_pool.rst | 5 +++ include/net/page_pool.h | 46 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/Documentation/networking/page_pool.rst b/Documentation/networking/page_pool.rst index 5db8c263b0c6..2c3c81473b97 100644 --- a/Documentation/networking/page_pool.rst +++ b/Documentation/networking/page_pool.rst @@ -221,3 +221,8 @@ Driver unload /* Driver unload */ page_pool_put_full_page(page_pool, page, false); xdp_rxq_info_unreg(&xdp_rxq); + +Functions and structures +======================== + +.. kernel-doc:: include/net/page_pool.h diff --git a/include/net/page_pool.h b/include/net/page_pool.h index 813c93499f20..cbea4df54918 100644 --- a/include/net/page_pool.h +++ b/include/net/page_pool.h @@ -50,6 +50,52 @@ PP_FLAG_DMA_SYNC_DEV |\ PP_FLAG_PAGE_FRAG) +/** + * struct netmem - A memory allocation from a &struct page_pool. + * @flags: The same as the page flags. Do not use directly. + * @pp_magic: Magic value to avoid recycling non page_pool allocated pages. + * @pp: The page pool this netmem was allocated from. + * @dma_addr: Call netmem_get_dma_addr() to read this value. + * @dma_addr_upper: Might need to be 64-bit on 32-bit architectures. + * @pp_frag_count: For frag page support, not supported in 32-bit + * architectures with 64-bit DMA. + * @_mapcount: Do not access this member directly. + * @_refcount: Do not access this member directly. Read it using + * netmem_ref_count() and manipulate it with netmem_get() and netmem_put(). + * + * This struct overlays struct page for now. Do not modify without a + * good understanding of the issues. + */ +struct netmem { + unsigned long flags; + unsigned long pp_magic; + struct page_pool *pp; + /* private: no need to document this padding */ + unsigned long _pp_mapping_pad; /* aliases with folio->mapping */ + /* public: */ + unsigned long dma_addr; + union { + unsigned long dma_addr_upper; + atomic_long_t pp_frag_count; + }; + atomic_t _mapcount; + atomic_t _refcount; +}; + +#define NETMEM_MATCH(pg, nm) \ + static_assert(offsetof(struct page, pg) == offsetof(struct netmem, nm)) +NETMEM_MATCH(flags, flags); +NETMEM_MATCH(lru, pp_magic); +NETMEM_MATCH(pp, pp); +NETMEM_MATCH(mapping, _pp_mapping_pad); +NETMEM_MATCH(dma_addr, dma_addr); +NETMEM_MATCH(dma_addr_upper, dma_addr_upper); +NETMEM_MATCH(pp_frag_count, pp_frag_count); +NETMEM_MATCH(_mapcount, _mapcount); +NETMEM_MATCH(_refcount, _refcount); +#undef NETMEM_MATCH +static_assert(sizeof(struct netmem) <= sizeof(struct page)); + /* * Fast allocation side cache array/stack * -- 2.35.1