Linux NFS development
 help / color / mirror / Atom feed
From: Ryan Roberts <ryan.roberts@arm.com>
To: "David S. Miller" <davem@davemloft.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	Anna Schumaker <anna@kernel.org>,
	Anshuman Khandual <anshuman.khandual@arm.com>,
	Ard Biesheuvel <ardb@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	David Hildenbrand <david@redhat.com>,
	Eric Dumazet <edumazet@google.com>,
	Greg Marsden <greg.marsden@oracle.com>,
	Ivan Ivanov <ivan.ivanov@suse.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Kalesh Singh <kaleshsingh@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Matthias Brugger <mbrugger@suse.com>,
	Miroslav Benes <mbenes@suse.cz>, Paolo Abeni <pabeni@redhat.com>,
	Trond Myklebust <trondmy@kernel.org>,
	Will Deacon <will@kernel.org>,
	Chuck Lever <chuck.lever@oracle.com>,
	Jeff Layton <jlayton@kernel.org>
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
Subject: Re: [RFC PATCH v1 23/57] net: Remove PAGE_SIZE compile-time constant assumption
Date: Wed, 16 Oct 2024 15:43:11 +0100	[thread overview]
Message-ID: <ed44eb37-b901-4a01-87a3-3670f8f57338@arm.com> (raw)
In-Reply-To: <20241014105912.3207374-23-ryan.roberts@arm.com>

+ 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 <ryan.roberts@arm.com>
> ---
> 
> ***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 <net/hotdata.h>
>  #include <net/proto_memory.h>
>  
> -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,


      reply	other threads:[~2024-10-16 14:43 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20241014105514.3206191-1-ryan.roberts@arm.com>
     [not found] ` <20241014105912.3207374-1-ryan.roberts@arm.com>
2024-10-14 10:58   ` [RFC PATCH v1 09/57] fs/nfs: Remove PAGE_SIZE compile-time constant assumption Ryan Roberts
2024-10-14 10:58   ` [RFC PATCH v1 21/57] sunrpc: " Ryan Roberts
2024-10-16 14:42     ` Ryan Roberts
2024-10-16 14:47       ` Chuck Lever
2024-10-16 14:54         ` Jeff Layton
2024-10-16 15:09           ` Ryan Roberts
2024-10-14 10:58   ` [RFC PATCH v1 23/57] net: " Ryan Roberts
2024-10-16 14:43     ` Ryan Roberts [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ed44eb37-b901-4a01-87a3-3670f8f57338@arm.com \
    --to=ryan.roberts@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=anna@kernel.org \
    --cc=anshuman.khandual@arm.com \
    --cc=ardb@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=chuck.lever@oracle.com \
    --cc=davem@davemloft.net \
    --cc=david@redhat.com \
    --cc=edumazet@google.com \
    --cc=greg.marsden@oracle.com \
    --cc=ivan.ivanov@suse.com \
    --cc=jlayton@kernel.org \
    --cc=kaleshsingh@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=mbenes@suse.cz \
    --cc=mbrugger@suse.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=trondmy@kernel.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox