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 418C5D2A520 for ; Wed, 16 Oct 2024 14:43:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D3DAC6B008C; Wed, 16 Oct 2024 10:43:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CC74D6B0092; Wed, 16 Oct 2024 10:43:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B3FEB6B0093; Wed, 16 Oct 2024 10:43:21 -0400 (EDT) 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 962826B008C for ; Wed, 16 Oct 2024 10:43:21 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id F313F1C453A for ; Wed, 16 Oct 2024 14:43:09 +0000 (UTC) X-FDA: 82679733234.11.EF57C6E Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf11.hostedemail.com (Postfix) with ESMTP id 2817440004 for ; Wed, 16 Oct 2024 14:43:08 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729089654; 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; bh=mXYI1Ka9NTd3z2ffbfl9TXMYekqR2A1Y+uP/hgMfihA=; b=iKaHfVjP2/mU/lIFgnBBX8bMmMVwilYwNTyxOvKGU9unY7Cfoyd0QqPE9+4GpMs+2AB1Gu 7zPmQCMUGTirXwEAHOBl2wtF6HWCMZlLZlm11U++5QC1bJAu2re/KWDH9pXwV2BDKdpG2d s7cJh3rJjd3Yc5+DNCxl+kba14KwMNc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729089654; a=rsa-sha256; cv=none; b=5uPJr/dBmuUP7FvymY2Sg6VUmIUQLtgxu7xdakUFzH04rljlvjomBMnsXSsDSxA0E5OYsh l99rczk9I2q4/aeu61rxyfiSVv3EESqIk/Vq9HrfQTNmKA1VAFFslgITJPYWblJp6oC7wX Fx4ByZk89AB9wUJQijj5nTnUzUcj9wE= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 41A961007; Wed, 16 Oct 2024 07:43:48 -0700 (PDT) Received: from [10.1.28.177] (XHFQ2J9959.cambridge.arm.com [10.1.28.177]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 13D063F71E; Wed, 16 Oct 2024 07:43:13 -0700 (PDT) Message-ID: Date: Wed, 16 Oct 2024 15:43:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v1 23/57] net: Remove PAGE_SIZE compile-time constant assumption Content-Language: en-GB To: "David S. Miller" , Andrew Morton , Anna Schumaker , Anshuman Khandual , Ard Biesheuvel , Catalin Marinas , David Hildenbrand , Eric Dumazet , Greg Marsden , Ivan Ivanov , Jakub Kicinski , Kalesh Singh , Marc Zyngier , Mark Rutland , Matthias Brugger , Miroslav Benes , Paolo Abeni , Trond Myklebust , Will Deacon , Chuck Lever , Jeff Layton Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-nfs@vger.kernel.org, netdev@vger.kernel.org References: <20241014105514.3206191-1-ryan.roberts@arm.com> <20241014105912.3207374-1-ryan.roberts@arm.com> <20241014105912.3207374-23-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: <20241014105912.3207374-23-ryan.roberts@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Stat-Signature: addg4uhazobozcnfnn6x3yhcxjhyhxj3 X-Rspamd-Queue-Id: 2817440004 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1729089788-685165 X-HE-Meta: U2FsdGVkX1/GohRlEKQiAlhbV2eNGzWSMvgyR/Jvix2/Jyd6sPzdIRUBOT2rJ7BFpFDXr4MgoqVrWwd7B5EDCpOHuswPxX7DVbooE++1SCZ/+Wa9ju5JlZFJs3BguxFItreJrNAV2zINYAurWEZ3FDYnaGFRhYB48fW4E7+2EhzWE8HQ5y8MTQ3izuXUMeUCevNi+w0YzRv/t9beDPn1YzEEiJco/Cj61ZDpOWIbKxMHVq07iJ109Xyl3J8HkLw/ckoGXNy5jgd9qv8yaq6qFxYWcu4Hjichk06yspvIHhvCEE5V1kn9HE86QLEYr4jHdbx72UVIBH7iQNNVrNMfT/9JHcxeqnEoGbXtWUjywM4TSXq7yJdhGbYBtLKlFMXImfP/ZxqF8cJw3blt61GUL+6cyuH7vWKOsfMvJ5DIJSmB1bMT/eWt66pQsHEq4VnaGfHk7LXdrxgISdsVmXGNui02vA+wZQxVRpNCQIWs3J0S6vaQVU70pQE0FANqUnD4BOzccmq7liAb5CVE24uQDZzWBTJaSSOFU/7j1W45YTeTeJO9ZxW4yvg2zgmUYAP1i21IuNHsn1bPQ0SllX30mWpPC6wTBPNhZeeN8kipsdfQdhb42c9jYML5JktAueQ53EDfY6TJ+RDnCXK8Ilbg1rykWfEMXV0fn+YZOYi8IhiAzod446LfAcigvg3ZF18FSPufEwfBYr9zdkAm15+3tljyKafLn1Tt5RAe8QQy3HRgJrZkfSjITTMN3DJ003WYlNV/xPA6gmRDEMy3qapoYCcaC8ZNfrgNsOToxkFFOlAe+5aucRPjyT+KeiYjjRNR7RZoP9HKWs67++4GDNzvbeC8I6YFbrhG32sHcHsfDQv/clopUfKzI/ogU7fRSmVckkPOYHIMrleowwISeBqg9nCpevyNYDRaOwLyeCiQ/cbPrFr8Kyt5uEKwcVklBokDXJiw/Vee05gZ5m9gNPZ Lsp0CHLj 5neNzKuxviwA+2wvrePGBMUAFCpNlWiOi7umqbRuLjqYoEm6pLiIo2KcretotHUHBBRdRq6eI7J0cXgS3eeD+pnYz1GIEZzKvchqYpZggajfcxOksymmyPgDomAgh09V72vSwbHEHrUG6h1gcPnC80opXZm/br1cgo54wyLZw2aGatvxlabrMzcjhkfb3KEsv5s1XditgAjtWK6smW66A6uE/GXuLltG2CQ4JvwziQ+SlWfSXShmZ3Q9AY8g72pKaqyrrvu1hPHENjy6oo9eGk+Kjbw== 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: + Chuck Lever, Jeff Layton This was a rather tricky series to get the recipients correct for and my script did not realize that "supporter" was a pseudonym for "maintainer" so you were missed off the original post. Appologies! More context in cover letter: https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/ On 14/10/2024 11:58, Ryan Roberts wrote: > To prepare for supporting boot-time page size selection, refactor code > to remove assumptions about PAGE_SIZE being compile-time constant. Code > intended to be equivalent when compile-time page size is active. > > Define NLMSG_GOODSIZE using min() instead of ifdeffery. This will now > evaluate to a compile-time constant for compile-time page size, but > evaluate at run-time when using boot-time page size. > > Rework NAPI small page frag infrastructure so that for boot-time page > size it is compiled in if 4K page size is in the possible range, but > defer deciding to use it to run time when the page size is known. No > change for compile-time page size case. > > Resize cache_defer_hash[] array for PAGE_SIZE_MAX. > > Convert a complex BUILD_BUG_ON() to runtime BUG_ON(). > > Wrap global variables that are initialized with PAGE_SIZE derived values > using DEFINE_GLOBAL_PAGE_SIZE_VAR() so their initialization can be > deferred for boot-time page size builds. > > Signed-off-by: Ryan Roberts > --- > > ***NOTE*** > Any confused maintainers may want to read the cover note here for context: > https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/ > > include/linux/netlink.h | 6 +----- > net/core/hotdata.c | 4 ++-- > net/core/skbuff.c | 4 ++-- > net/core/sysctl_net_core.c | 2 +- > net/sunrpc/cache.c | 3 ++- > net/unix/af_unix.c | 2 +- > 6 files changed, 9 insertions(+), 12 deletions(-) > > diff --git a/include/linux/netlink.h b/include/linux/netlink.h > index b332c2048c755..ffa1e94111f89 100644 > --- a/include/linux/netlink.h > +++ b/include/linux/netlink.h > @@ -267,11 +267,7 @@ netlink_skb_clone(struct sk_buff *skb, gfp_t gfp_mask) > * use enormous buffer sizes on recvmsg() calls just to avoid > * MSG_TRUNC when PAGE_SIZE is very large. > */ > -#if PAGE_SIZE < 8192UL > -#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(PAGE_SIZE) > -#else > -#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(8192UL) > -#endif > +#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(min(PAGE_SIZE, 8192UL)) > > #define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN) > > diff --git a/net/core/hotdata.c b/net/core/hotdata.c > index d0aaaaa556f22..e1f30e87ba6e9 100644 > --- a/net/core/hotdata.c > +++ b/net/core/hotdata.c > @@ -5,7 +5,7 @@ > #include > #include > > -struct net_hotdata net_hotdata __cacheline_aligned = { > +__DEFINE_GLOBAL_PAGE_SIZE_VAR(struct net_hotdata, net_hotdata, __cacheline_aligned, { > .offload_base = LIST_HEAD_INIT(net_hotdata.offload_base), > .ptype_all = LIST_HEAD_INIT(net_hotdata.ptype_all), > .gro_normal_batch = 8, > @@ -21,5 +21,5 @@ struct net_hotdata net_hotdata __cacheline_aligned = { > .sysctl_max_skb_frags = MAX_SKB_FRAGS, > .sysctl_skb_defer_max = 64, > .sysctl_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE > -}; > +}); > EXPORT_SYMBOL(net_hotdata); > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index 83f8cd8aa2d16..b6c8eee0cc74b 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -219,9 +219,9 @@ static void skb_under_panic(struct sk_buff *skb, unsigned int sz, void *addr) > #define NAPI_SKB_CACHE_BULK 16 > #define NAPI_SKB_CACHE_HALF (NAPI_SKB_CACHE_SIZE / 2) > > -#if PAGE_SIZE == SZ_4K > +#if PAGE_SIZE_MIN <= SZ_4K && SZ_4K <= PAGE_SIZE_MAX > > -#define NAPI_HAS_SMALL_PAGE_FRAG 1 > +#define NAPI_HAS_SMALL_PAGE_FRAG (PAGE_SIZE == SZ_4K) > #define NAPI_SMALL_PAGE_PFMEMALLOC(nc) ((nc).pfmemalloc) > > /* specialized page frag allocator using a single order 0 page > diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c > index 86a2476678c48..a7a2eb7581bd1 100644 > --- a/net/core/sysctl_net_core.c > +++ b/net/core/sysctl_net_core.c > @@ -33,7 +33,7 @@ static int int_3600 = 3600; > static int min_sndbuf = SOCK_MIN_SNDBUF; > static int min_rcvbuf = SOCK_MIN_RCVBUF; > static int max_skb_frags = MAX_SKB_FRAGS; > -static int min_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE; > +static DEFINE_GLOBAL_PAGE_SIZE_VAR(int, min_mem_pcpu_rsv, SK_MEMORY_PCPU_RESERVE); > > static int net_msg_warn; /* Unused, but still a sysctl */ > > diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c > index 95ff747061046..4e682c0cd7586 100644 > --- a/net/sunrpc/cache.c > +++ b/net/sunrpc/cache.c > @@ -573,13 +573,14 @@ EXPORT_SYMBOL_GPL(cache_purge); > */ > > #define DFR_HASHSIZE (PAGE_SIZE/sizeof(struct list_head)) > +#define DFR_HASHSIZE_MAX (PAGE_SIZE_MAX/sizeof(struct list_head)) > #define DFR_HASH(item) ((((long)item)>>4 ^ (((long)item)>>13)) % DFR_HASHSIZE) > > #define DFR_MAX 300 /* ??? */ > > static DEFINE_SPINLOCK(cache_defer_lock); > static LIST_HEAD(cache_defer_list); > -static struct hlist_head cache_defer_hash[DFR_HASHSIZE]; > +static struct hlist_head cache_defer_hash[DFR_HASHSIZE_MAX]; > static int cache_defer_cnt; > > static void __unhash_deferred_req(struct cache_deferred_req *dreq) > diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c > index 0be0dcb07f7b6..1cf9f583358af 100644 > --- a/net/unix/af_unix.c > +++ b/net/unix/af_unix.c > @@ -2024,7 +2024,7 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg, > MAX_SKB_FRAGS * PAGE_SIZE); > data_len = PAGE_ALIGN(data_len); > > - BUILD_BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE); > + BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE); > } > > skb = sock_alloc_send_pskb(sk, len - data_len, data_len,