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 59201C46467 for ; Wed, 11 Jan 2023 04:22:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 91FD590000B; Tue, 10 Jan 2023 23:22:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8CFCF900003; Tue, 10 Jan 2023 23:22:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 74DF090000C; Tue, 10 Jan 2023 23:22:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 1BEA6900003 for ; Tue, 10 Jan 2023 23:22:26 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id E46D6140509 for ; Wed, 11 Jan 2023 04:22:25 +0000 (UTC) X-FDA: 80341221450.22.76CA0B1 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf30.hostedemail.com (Postfix) with ESMTP id 57F5E8000B for ; Wed, 11 Jan 2023 04:22:24 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=uSu5hoIg; spf=none (imf30.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=1673410944; 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=I7aASeW2bakt0a8pxVeEBiqLf4GO7WCoG44w/epo15A=; b=loAWtGMmhqfXerg7NRAkF9Vgz0nvhql4wdRlIFzp86NDadN3FLEzty14AfLfjkA8NE+hT3 udJ2a42Ml57MbHJWLoScj2lK/vtS6dZJLJCxaM0PrWmNT4ZEtWOthilmUKEA+A9U9ljePf 55faSia0zcqZ7ph0LQPGDLgVGcZGYGw= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=uSu5hoIg; spf=none (imf30.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=1673410944; a=rsa-sha256; cv=none; b=O/hjqATwDUV7VFrKBwuMq56nu71GBzdZMMustk9cRM6gQLKeIeBp0+CMkTkB14EEfGJ/6h pJ5zvARP12LmfkiSyQMAh/hvfCd0oUaApxV/FachAnumOHy+IsAHSlVONb5Oa3OwKq7YU4 FZVglPxAIJAiEDcFyQRyL5s4IByLtyw= 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=I7aASeW2bakt0a8pxVeEBiqLf4GO7WCoG44w/epo15A=; b=uSu5hoIgzDuHOgIJLcq8PNEDzt SDNRMpkVSmukNDELlT4wmw0nN8d0STryyMwkA+yq08u3WIKobL5OUpuLgNQR0ejpOVFDPXrN+cukw Bm/Nic1p/cRl8RdUNGMt349f4EXBtNG00qE5v8infB+/jfzTcKycMNzKUFkFBunH3rdEgsNk+fDXK 09RberagCyyu0kXSP+W4OOR/dNGz6yOgAXQ6bEXiuuCGMGP3GXkJpaV/AYh+XGR8iUzJ/PV2hk4kp JnVjwSQBBKGA46RWkMdbc4n3dEwzedYAFKtaDLtzvg7xNdGPeuc3X62IUi8mQ+3NcmmHrgxoUdwls NmEHsHIQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1pFScy-003nxi-8L; Wed, 11 Jan 2023 04:22:16 +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 , Jesper Dangaard Brouer , Jesse Brandeburg Subject: [PATCH v3 01/26] netmem: Create new type Date: Wed, 11 Jan 2023 04:21:49 +0000 Message-Id: <20230111042214.907030-2-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230111042214.907030-1-willy@infradead.org> References: <20230111042214.907030-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 57F5E8000B X-Stat-Signature: p65z4gno4uz71nyr695yqxp1uchpzxjk X-Rspam-User: X-HE-Tag: 1673410944-573391 X-HE-Meta: U2FsdGVkX180977NRmypsYpauw074n5ARW6RMOqGvrR+tKWYao1XX3lid5WRPIYFamciRAgWJSY627icntvdVoTuehlGagGeLDX2En/6GUnUCw4Kpb3bevas0eblXOZnUgbHJSNkqvUvjFvW3gUMSuwkrjjMce4PcbY0eZdU62cyDxXog+HKjAK9wPgMfxXNkAjgDjFqHiukmsevNETs4O3L0rTggTa87vM84i/X0leoy/UadzthC+iM+lcFBjtqwV6DcGyuQ4k1xzZe7cXpXpAS5Q7tvE6q0O6UzoTYrBzqps4D6RMqXWMxt0RjQvhag/vNJ9FcwK5BfAlUwelOTMZsd+t0+fMnNkQMWh9bdzF9ubvViRPBmr8/HVPVQ02Ig9hi4n+gokoA9DmYNgwOYoW0UlyiKjr5eJrfZdsg8RNfZeBRrK5TAOjXBzf707e9hNWJ+5v9r/RyQxEwkMYH+m/gUMc87ZcIz4IhSwW48OIN1gyQEfwezKfgQ8LIMzDyIcE+Sr4GJf0JWkQJzRrN8VZrVIVLXNEjtaaL/VqdMdW0mI6xrXbbB4Kt2Vt6NzaAtIW4V7pBQ92yIKuHdPVs++zgPbmIf5edmmdJIbdz+P/cH1SXQq4N7Ee2lx0gru6v25jllPKnJ9SBd+SGHTKSbRA0INSfafaltyWVlimNAZwzgOtEf95xiXihncwxv9pREOG5s0JCDpiu9X42+nY+3ice5fF/0ex8KQ9Dcbp9bs8CQWU9bfCoklyG4pzp7FqRCikIObiwsYyLUM8YrWSO0WA88Wi1d6AdpV4gegXgB8VV2HtZhr9uHQj5u7Z6gwV8nH07BmUGwWH1Qh3LsDseLLz/MZx1zwwF/KF72+qgOdaiOTCwi0yoCxkhW6lqZbCTV8mlxcSs7SM= 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) Acked-by: Jesper Dangaard Brouer Acked-by: Ilias Apalodimas Reviewed-by: Jesse Brandeburg --- 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