All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@kernel.org>
To: "David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@kernel.org>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Aleksandr Loktionov <aleksandr.loktionov@intel.com>,
	Stanislav Fomichev <sdf@fomichev.me>,
	Mina Almasry <almasrymina@google.com>
Cc: Arnd Bergmann <arnd@arndb.de>, Simon Horman <horms@kernel.org>,
	Willem de Bruijn <willemb@google.com>,
	Josef Bacik <josef@toxicpanda.com>,
	Wang Zhan <wang.zhan@smartx.com>,
	Daniel Borkmann <daniel@iogearbox.net>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] net: kunit: move struct net_devmem_dmabuf_binding off stack
Date: Fri, 13 Nov 2026 11:11:00 +0100	[thread overview]
Message-ID: <20261113101109.3227815-1-arnd@kernel.org> (raw)

From: Arnd Bergmann <arnd@arndb.de>

The net_devmem_dmabuf_binding structure is really way too big to
live on the stack, and causes warnings on my randconfig build machine
with a reasonable per-function limit:

net/core/net_test.c: In function 'netmem_ref_test_tcp_devmem_recv':
net/core/net_test.c:1720:1: error: the frame size of 1744 bytes is larger than 1536 bytes [-Werror=frame-larger-than=]
 1720 | }
      | ^
net/core/net_test.c: In function 'netmem_ref_test_skb_segment':
net/core/net_test.c:1477:1: error: the frame size of 1584 bytes is larger than 1536 bytes [-Werror=frame-larger-than=]

Since the binding object is never used concurrently in multiple tests,
avoid this by just having a global copy of it and reinitializing it
for every user.

Fixes: 2285346afc99 ("net: kunit: test netmem, page_pool, and skb frag refcounting")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
I don't particularly like this workaround, as global variables are
always hacky like this. If anyone has a better idea to avoid the
last stack structure, let's do that instead.

Without the patch, I run into this every few randconfig builds,
which did not happen on linux-next before the merge window.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 net/core/net_test.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/net/core/net_test.c b/net/core/net_test.c
index 976d14896251..19f422300d9c 100644
--- a/net/core/net_test.c
+++ b/net/core/net_test.c
@@ -984,13 +984,14 @@ static void netmem_ref_test_pp_page(struct kunit *test)
 #endif
 
 #if defined(CONFIG_PAGE_POOL) && defined(CONFIG_NET_DEVMEM)
+static struct net_devmem_dmabuf_binding binding;
+
 static void dummy_percpu_ref_release(struct percpu_ref *ref)
 {
 }
 
 static void netmem_ref_test_net_iov(struct kunit *test)
 {
-	struct net_devmem_dmabuf_binding binding = {};
 	struct page_pool_params pp_params = {
 		.order = 0,
 		.pool_size = 4,
@@ -1003,6 +1004,7 @@ static void netmem_ref_test_net_iov(struct kunit *test)
 	long base_ref;
 	int err;
 
+	memset(&binding, 0, sizeof(binding));
 	err = percpu_ref_init(&binding.ref, dummy_percpu_ref_release,
 			      PERCPU_REF_INIT_ATOMIC, GFP_KERNEL);
 	KUNIT_ASSERT_EQ(test, err, 0);
@@ -1145,7 +1147,6 @@ static void netmem_ref_test_release_data(struct kunit *test)
 		.nid = NUMA_NO_NODE,
 	};
 	struct sk_buff *skb, *clone1, *clone2, *ext;
-	struct net_devmem_dmabuf_binding binding = {};
 	struct net_iov niov = {};
 	struct page_pool *pool;
 	struct page *page;
@@ -1154,6 +1155,7 @@ static void netmem_ref_test_release_data(struct kunit *test)
 	int base_ref;
 	int i;
 
+	memset(&binding, 0, sizeof(binding));
 	pool = page_pool_create(&pp_params);
 	KUNIT_ASSERT_FALSE(test, IS_ERR(pool));
 	page = page_pool_dev_alloc_pages(pool);
@@ -1335,7 +1337,6 @@ static void netmem_ref_test_skb_segment(struct kunit *test)
 		.flags = SKBFL_ZEROCOPY_ENABLE,
 	};
 	struct sk_buff *head, *list, *segs, *seg;
-	struct net_devmem_dmabuf_binding binding = {};
 	struct net_iov niov = {};
 	struct page *pp_page, *reg_page;
 	netmem_ref pp_nm, niov_nm;
@@ -1343,6 +1344,7 @@ static void netmem_ref_test_skb_segment(struct kunit *test)
 	long base_pp_ref, base_iov_ref;
 	int base_pp_page_ref, base_reg_ref;
 
+	memset(&binding, 0, sizeof(binding));
 	pool = page_pool_create(&pp_params);
 	KUNIT_ASSERT_FALSE(test, IS_ERR(pool));
 	pp_page = page_pool_dev_alloc_pages(pool);
@@ -1634,7 +1636,6 @@ static void netmem_ref_test_try_coalesce(struct kunit *test)
 		.nid = NUMA_NO_NODE,
 	};
 	struct sk_buff *to, *from, *clone;
-	struct net_devmem_dmabuf_binding binding = {};
 	struct net_iov niov = {};
 	struct page *pp_page, *reg_page;
 	netmem_ref pp_nm, niov_nm;
@@ -1644,6 +1645,7 @@ static void netmem_ref_test_try_coalesce(struct kunit *test)
 	bool fragstolen;
 	int delta;
 
+	memset(&binding, 0, sizeof(binding));
 	pool = page_pool_create(&pp_params);
 	KUNIT_ASSERT_FALSE(test, IS_ERR(pool));
 	pp_page = page_pool_dev_alloc_pages(pool);
@@ -1766,7 +1768,6 @@ static void netmem_ref_test_tcp_devmem_recv(struct kunit *test)
 		.pool_size = 4,
 		.nid = NUMA_NO_NODE,
 	};
-	struct net_devmem_dmabuf_binding binding = {};
 	struct msghdr msg = {};
 	struct dmabuf_token token;
 	struct dmabuf_cmsg *cmsg;
@@ -1780,6 +1781,7 @@ static void netmem_ref_test_tcp_devmem_recv(struct kunit *test)
 	long base_iov_ref;
 	int ret;
 
+	memset(&binding, 0, sizeof(binding));
 	KUNIT_ASSERT_EQ(test,
 			sock_create_kern(&init_net, AF_INET, SOCK_STREAM,
 					 IPPROTO_TCP, &sock),
-- 
2.53.0


                 reply	other threads:[~2026-11-13 10:11 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20261113101109.3227815-1-arnd@kernel.org \
    --to=arnd@kernel.org \
    --cc=aleksandr.loktionov@intel.com \
    --cc=almasrymina@google.com \
    --cc=arnd@arndb.de \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@kernel.org \
    --cc=horms@kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sdf@fomichev.me \
    --cc=wang.zhan@smartx.com \
    --cc=willemb@google.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.