* [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45
@ 2023-11-10 15:36 Willem de Bruijn
2023-11-12 10:14 ` Simon Horman
2023-11-13 11:10 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 4+ messages in thread
From: Willem de Bruijn @ 2023-11-10 15:36 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, edumazet, pabeni, Willem de Bruijn
From: Willem de Bruijn <willemb@google.com>
The test allocs a single page to hold all the frag_list skbs. This
is insufficient on kernels with CONFIG_MAX_SKB_FRAGS=45, due to the
increased skb_shared_info frags[] array length.
gso_test_func: ASSERTION FAILED at net/core/gso_test.c:210
Expected alloc_size <= ((1UL) << 12), but
alloc_size == 5075 (0x13d3)
((1UL) << 12) == 4096 (0x1000)
Simplify the logic. Just allocate a page for each frag_list skb.
Fixes: 4688ecb1385f ("net: expand skb_segment unit test with frag_list coverage")
Signed-off-by: Willem de Bruijn <willemb@google.com>
---
net/core/gso_test.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/net/core/gso_test.c b/net/core/gso_test.c
index ceb684be4cbf..4c2e77bd12f4 100644
--- a/net/core/gso_test.c
+++ b/net/core/gso_test.c
@@ -180,18 +180,17 @@ static void gso_test_func(struct kunit *test)
}
if (tcase->frag_skbs) {
- unsigned int total_size = 0, total_true_size = 0, alloc_size = 0;
+ unsigned int total_size = 0, total_true_size = 0;
struct sk_buff *frag_skb, *prev = NULL;
- page = alloc_page(GFP_KERNEL);
- KUNIT_ASSERT_NOT_NULL(test, page);
- page_ref_add(page, tcase->nr_frag_skbs - 1);
-
for (i = 0; i < tcase->nr_frag_skbs; i++) {
unsigned int frag_size;
+ page = alloc_page(GFP_KERNEL);
+ KUNIT_ASSERT_NOT_NULL(test, page);
+
frag_size = tcase->frag_skbs[i];
- frag_skb = build_skb(page_address(page) + alloc_size,
+ frag_skb = build_skb(page_address(page),
frag_size + shinfo_size);
KUNIT_ASSERT_NOT_NULL(test, frag_skb);
__skb_put(frag_skb, frag_size);
@@ -204,11 +203,8 @@ static void gso_test_func(struct kunit *test)
total_size += frag_size;
total_true_size += frag_skb->truesize;
- alloc_size += frag_size + shinfo_size;
}
- KUNIT_ASSERT_LE(test, alloc_size, PAGE_SIZE);
-
skb->len += total_size;
skb->data_len += total_size;
skb->truesize += total_true_size;
--
2.43.0.rc0.421.g78406f8d94-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45
2023-11-10 15:36 [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45 Willem de Bruijn
@ 2023-11-12 10:14 ` Simon Horman
2023-11-12 14:23 ` Willem de Bruijn
2023-11-13 11:10 ` patchwork-bot+netdevbpf
1 sibling, 1 reply; 4+ messages in thread
From: Simon Horman @ 2023-11-12 10:14 UTC (permalink / raw)
To: Willem de Bruijn; +Cc: netdev, davem, kuba, edumazet, pabeni, Willem de Bruijn
On Fri, Nov 10, 2023 at 10:36:00AM -0500, Willem de Bruijn wrote:
> From: Willem de Bruijn <willemb@google.com>
>
> The test allocs a single page to hold all the frag_list skbs. This
> is insufficient on kernels with CONFIG_MAX_SKB_FRAGS=45, due to the
> increased skb_shared_info frags[] array length.
>
> gso_test_func: ASSERTION FAILED at net/core/gso_test.c:210
> Expected alloc_size <= ((1UL) << 12), but
> alloc_size == 5075 (0x13d3)
> ((1UL) << 12) == 4096 (0x1000)
>
> Simplify the logic. Just allocate a page for each frag_list skb.
>
> Fixes: 4688ecb1385f ("net: expand skb_segment unit test with frag_list coverage")
> Signed-off-by: Willem de Bruijn <willemb@google.com>
Thanks Willem,
I agree that the logic does as described,
that it should resolve the flagged problem,
and that as a bonus it is a nice simplification.
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45
2023-11-12 10:14 ` Simon Horman
@ 2023-11-12 14:23 ` Willem de Bruijn
0 siblings, 0 replies; 4+ messages in thread
From: Willem de Bruijn @ 2023-11-12 14:23 UTC (permalink / raw)
To: Simon Horman; +Cc: netdev, davem, kuba, edumazet, pabeni, Willem de Bruijn
On Sun, Nov 12, 2023 at 5:14 AM Simon Horman <horms@kernel.org> wrote:
>
> On Fri, Nov 10, 2023 at 10:36:00AM -0500, Willem de Bruijn wrote:
> > From: Willem de Bruijn <willemb@google.com>
> >
> > The test allocs a single page to hold all the frag_list skbs. This
> > is insufficient on kernels with CONFIG_MAX_SKB_FRAGS=45, due to the
> > increased skb_shared_info frags[] array length.
> >
> > gso_test_func: ASSERTION FAILED at net/core/gso_test.c:210
> > Expected alloc_size <= ((1UL) << 12), but
> > alloc_size == 5075 (0x13d3)
> > ((1UL) << 12) == 4096 (0x1000)
> >
> > Simplify the logic. Just allocate a page for each frag_list skb.
> >
> > Fixes: 4688ecb1385f ("net: expand skb_segment unit test with frag_list coverage")
> > Signed-off-by: Willem de Bruijn <willemb@google.com>
>
> Thanks Willem,
>
> I agree that the logic does as described,
> that it should resolve the flagged problem,
> and that as a bonus it is a nice simplification.
>
> Reviewed-by: Simon Horman <horms@kernel.org>
Thanks for the review Simon.
One thing I did not mention in the commit message and should be clear
is that these kunit tests lack cleanup code on error paths. If an
assertion fails, previously allocated memory is leaked.
This seems to be common procedure, and keeps the tests simple.
It takes superuser privileges to insmod tests, and they are not loaded
in a production environment. Which I assume is the basis for finding
this acceptable. They're usually run in a UML process -- if not
necessarily: I discovered this issue when running on a real system
with a config I had not anticipated.
Long story short, leaks on error are not an oversight, and common in
tests. If anyone thinks this is wrong, I can certainly revisit.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45
2023-11-10 15:36 [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45 Willem de Bruijn
2023-11-12 10:14 ` Simon Horman
@ 2023-11-13 11:10 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-11-13 11:10 UTC (permalink / raw)
To: Willem de Bruijn; +Cc: netdev, davem, kuba, edumazet, pabeni, willemb
Hello:
This patch was applied to netdev/net.git (main)
by David S. Miller <davem@davemloft.net>:
On Fri, 10 Nov 2023 10:36:00 -0500 you wrote:
> From: Willem de Bruijn <willemb@google.com>
>
> The test allocs a single page to hold all the frag_list skbs. This
> is insufficient on kernels with CONFIG_MAX_SKB_FRAGS=45, due to the
> increased skb_shared_info frags[] array length.
>
> gso_test_func: ASSERTION FAILED at net/core/gso_test.c:210
> Expected alloc_size <= ((1UL) << 12), but
> alloc_size == 5075 (0x13d3)
> ((1UL) << 12) == 4096 (0x1000)
>
> [...]
Here is the summary with links:
- [net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45
https://git.kernel.org/netdev/net/c/e6daf129ccb7
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-11-13 11:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-10 15:36 [PATCH net] net: gso_test: support CONFIG_MAX_SKB_FRAGS up to 45 Willem de Bruijn
2023-11-12 10:14 ` Simon Horman
2023-11-12 14:23 ` Willem de Bruijn
2023-11-13 11:10 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).