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 <[email protected]>
Reviewed-by: Willem de Bruijn <[email protected]> > --- > CC: [email protected] > CC: [email protected] > CC: [email protected] > CC: [email protected] > CC: [email protected] > --- > .../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 >
