[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250822200052.1675613-4-kuba@kernel.org>
Date: Fri, 22 Aug 2025 13:00:51 -0700
From: Jakub Kicinski <kuba@...nel.org>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org,
edumazet@...gle.com,
pabeni@...hat.com,
andrew+netdev@...n.ch,
horms@...nel.org,
almasrymina@...gle.com,
sdf@...ichev.me,
joe@...a.to,
linux-kselftest@...r.kernel.org,
Jakub Kicinski <kuba@...nel.org>
Subject: [PATCH net-next 3/4] selftests: drv-net: ncdevmem: restore old channel config
In case changing channel count with provider bound succeeds
unexpectedly - make sure we return to original settings.
Signed-off-by: Jakub Kicinski <kuba@...nel.org>
---
.../selftests/drivers/net/hw/ncdevmem.c | 34 ++++++++++++-------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c b/tools/testing/selftests/drivers/net/hw/ncdevmem.c
index 8d9d579834b1..580b4459a840 100644
--- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c
+++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c
@@ -469,7 +469,7 @@ static void reset_rss(void)
run_command("ethtool -X %s default >&2", ifname, start_queue);
}
-static int configure_channels(unsigned int rx, unsigned int tx)
+static int check_changing_channels(unsigned int rx, unsigned int tx)
{
struct ethtool_channels_get_req *gchan;
struct ethtool_channels_set_req *schan;
@@ -525,20 +525,32 @@ static int configure_channels(unsigned int rx, unsigned int tx)
ethtool_channels_set_req_set_tx_count(schan, tx - rx);
}
- ret = ethtool_channels_set(ys, schan);
- if (ret)
- fprintf(stderr, "YNL set channels: %s\n", ys->err.msg);
} else if (chan->_present.rx_count) {
ethtool_channels_set_req_set_rx_count(schan, rx);
ethtool_channels_set_req_set_tx_count(schan, tx);
-
- ret = ethtool_channels_set(ys, schan);
- if (ret)
- fprintf(stderr, "YNL set channels: %s\n", ys->err.msg);
} else {
fprintf(stderr, "Error: device has neither combined nor rx channels\n");
ret = -1;
+ goto exit_free_schan;
}
+
+ ret = ethtool_channels_set(ys, schan);
+ if (ret) {
+ fprintf(stderr, "YNL set channels: %s\n", ys->err.msg);
+ } else {
+ /* We were expecting a failure, go back to previous settings */
+ ethtool_channels_set_req_set_combined_count(schan,
+ chan->combined_count);
+ ethtool_channels_set_req_set_rx_count(schan, chan->rx_count);
+ ethtool_channels_set_req_set_tx_count(schan, chan->tx_count);
+
+ ret = ethtool_channels_set(ys, schan);
+ if (ret)
+ fprintf(stderr, "YNL un-setting channels: %s\n",
+ ys->err.msg);
+ }
+
+exit_free_schan:
ethtool_channels_set_req_free(schan);
exit_free_chan:
ethtool_channels_get_rsp_free(chan);
@@ -1019,16 +1031,14 @@ int run_devmem_tests(void)
}
/* Deactivating a bound queue should not be legal */
- if (!configure_channels(num_queues, num_queues)) {
+ if (!check_changing_channels(num_queues, num_queues)) {
pr_err("Deactivating a bound queue should be illegal");
- goto err_reset_channels;
+ goto err_unbind;
}
err = 0;
goto err_unbind;
-err_reset_channels:
- /* TODO */
err_unbind:
ynl_sock_destroy(ys);
err_reset_headersplit:
--
2.50.1
Powered by blists - more mailing lists