* [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count
@ 2026-06-29 23:43 Jakub Kicinski
2026-06-30 17:11 ` Willem de Bruijn
2026-07-02 8:30 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 4+ messages in thread
From: Jakub Kicinski @ 2026-06-29 23:43 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, Jakub Kicinski,
shuah, willemb, noren, gal, linux-kselftest
The RPS test needs a free CPU within the first RPS_MAX_CPUS (16)
cores. This is easily violated if the NIC or env allocates the
IRQs to cores linearly.
Cap the Rx queues at 8, we don't need more. This makes the test
pass on CX7 in NIPA.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: shuah@kernel.org
CC: willemb@google.com
CC: noren@nvidia.com
CC: gal@nvidia.com
CC: linux-kselftest@vger.kernel.org
---
.../selftests/drivers/net/hw/toeplitz.py | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/tools/testing/selftests/drivers/net/hw/toeplitz.py b/tools/testing/selftests/drivers/net/hw/toeplitz.py
index cd7e080e6f84..571732198b93 100755
--- a/tools/testing/selftests/drivers/net/hw/toeplitz.py
+++ b/tools/testing/selftests/drivers/net/hw/toeplitz.py
@@ -21,6 +21,8 @@ from lib.py import ksft_variants, KsftNamedVariant, KsftSkipEx, KsftFailEx
ETH_RSS_HASH_TOP = 1
# Must match RPS_MAX_CPUS in toeplitz.c
RPS_MAX_CPUS = 16
+# Cap Rx queues so IRQ pinning leaves free CPUs in the RPS_MAX_CPUS range
+QUEUE_CAP = 8
def _check_rps_and_rfs_not_configured(cfg):
@@ -48,6 +50,25 @@ RPS_MAX_CPUS = 16
return int(data)
+def _cap_queue_count(cfg):
+ ehdr = {"header": {"dev-index": cfg.ifindex}}
+ chans = cfg.ethnl.channels_get(ehdr)
+
+ config = {}
+ restore = {}
+ for key in ("combined-count", "rx-count"):
+ cur = chans.get(key, 0)
+ if cur > QUEUE_CAP:
+ config[key] = QUEUE_CAP
+ restore[key] = cur
+
+ if not config:
+ return
+
+ cfg.ethnl.channels_set(ehdr | config)
+ defer(cfg.ethnl.channels_set, ehdr | restore)
+
+
def _get_irq_cpus(cfg):
"""
Read the list of IRQs for the device Rx queues.
@@ -177,6 +198,7 @@ RPS_MAX_CPUS = 16
]
if grp:
+ _cap_queue_count(cfg)
_check_rps_and_rfs_not_configured(cfg)
if grp == "rss":
irq_cpus = ",".join([str(x) for x in _get_irq_cpus(cfg)])
--
2.54.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count
2026-06-29 23:43 [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count Jakub Kicinski
@ 2026-06-30 17:11 ` Willem de Bruijn
2026-06-30 23:10 ` Jakub Kicinski
2026-07-02 8:30 ` patchwork-bot+netdevbpf
1 sibling, 1 reply; 4+ messages in thread
From: Willem de Bruijn @ 2026-06-30 17:11 UTC (permalink / raw)
To: Jakub Kicinski, davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, Jakub Kicinski,
shuah, willemb, noren, gal, linux-kselftest
Jakub Kicinski wrote:
> The RPS test needs a free CPU within the first RPS_MAX_CPUS (16)
> cores. This is easily violated if the NIC or env allocates the
> IRQs to cores linearly.
>
> Cap the Rx queues at 8, we don't need more. This makes the test
> pass on CX7 in NIPA.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Willem de Bruijn <willemb@google.com>
> ---
> CC: shuah@kernel.org
> CC: willemb@google.com
> CC: noren@nvidia.com
> CC: gal@nvidia.com
> CC: linux-kselftest@vger.kernel.org
> ---
> .../selftests/drivers/net/hw/toeplitz.py | 22 +++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/tools/testing/selftests/drivers/net/hw/toeplitz.py b/tools/testing/selftests/drivers/net/hw/toeplitz.py
> index cd7e080e6f84..571732198b93 100755
> --- a/tools/testing/selftests/drivers/net/hw/toeplitz.py
> +++ b/tools/testing/selftests/drivers/net/hw/toeplitz.py
> @@ -21,6 +21,8 @@ from lib.py import ksft_variants, KsftNamedVariant, KsftSkipEx, KsftFailEx
> ETH_RSS_HASH_TOP = 1
> # Must match RPS_MAX_CPUS in toeplitz.c
> RPS_MAX_CPUS = 16
> +# Cap Rx queues so IRQ pinning leaves free CPUs in the RPS_MAX_CPUS range
> +QUEUE_CAP = 8
>
>
> def _check_rps_and_rfs_not_configured(cfg):
> @@ -48,6 +50,25 @@ RPS_MAX_CPUS = 16
> return int(data)
>
>
> +def _cap_queue_count(cfg):
> + ehdr = {"header": {"dev-index": cfg.ifindex}}
> + chans = cfg.ethnl.channels_get(ehdr)
> +
> + config = {}
> + restore = {}
> + for key in ("combined-count", "rx-count"):
This assumes that combined and rx are not set at the same time.
SGTM, not expected in real devices. But technically they could be.
> + cur = chans.get(key, 0)
> + if cur > QUEUE_CAP:
> + config[key] = QUEUE_CAP
> + restore[key] = cur
> +
> + if not config:
> + return
> +
> + cfg.ethnl.channels_set(ehdr | config)
> + defer(cfg.ethnl.channels_set, ehdr | restore)
> +
> +
> def _get_irq_cpus(cfg):
> """
> Read the list of IRQs for the device Rx queues.
> @@ -177,6 +198,7 @@ RPS_MAX_CPUS = 16
> ]
>
> if grp:
> + _cap_queue_count(cfg)
> _check_rps_and_rfs_not_configured(cfg)
> if grp == "rss":
> irq_cpus = ",".join([str(x) for x in _get_irq_cpus(cfg)])
> --
> 2.54.0
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count
2026-06-30 17:11 ` Willem de Bruijn
@ 2026-06-30 23:10 ` Jakub Kicinski
0 siblings, 0 replies; 4+ messages in thread
From: Jakub Kicinski @ 2026-06-30 23:10 UTC (permalink / raw)
To: Willem de Bruijn
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms, shuah,
willemb, noren, gal, linux-kselftest
On Tue, 30 Jun 2026 13:11:15 -0400 Willem de Bruijn wrote:
> > +def _cap_queue_count(cfg):
> > + ehdr = {"header": {"dev-index": cfg.ifindex}}
> > + chans = cfg.ethnl.channels_get(ehdr)
> > +
> > + config = {}
> > + restore = {}
> > + for key in ("combined-count", "rx-count"):
>
> This assumes that combined and rx are not set at the same time.
> SGTM, not expected in real devices. But technically they could be.
Ack, some tests just assume the NIC uses combined, which is most common.
If this ever causes issues we should probably add support for
provisioning min/max number of queues in the env setup itself.
IIRC someone even posted that at some point.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count
2026-06-29 23:43 [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count Jakub Kicinski
2026-06-30 17:11 ` Willem de Bruijn
@ 2026-07-02 8:30 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-07-02 8:30 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms, shuah,
willemb, noren, gal, linux-kselftest
Hello:
This patch was applied to netdev/net-next.git (main)
by Paolo Abeni <pabeni@redhat.com>:
On Mon, 29 Jun 2026 16:43:53 -0700 you wrote:
> The RPS test needs a free CPU within the first RPS_MAX_CPUS (16)
> cores. This is easily violated if the NIC or env allocates the
> IRQs to cores linearly.
>
> Cap the Rx queues at 8, we don't need more. This makes the test
> pass on CX7 in NIPA.
>
> [...]
Here is the summary with links:
- [net-next] selftests: drv-net: toeplitz: cap the Rx queue count
https://git.kernel.org/netdev/net-next/c/07d3aaa046ce
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:[~2026-07-02 8:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-29 23:43 [PATCH net-next] selftests: drv-net: toeplitz: cap the Rx queue count Jakub Kicinski
2026-06-30 17:11 ` Willem de Bruijn
2026-06-30 23:10 ` Jakub Kicinski
2026-07-02 8:30 ` 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