summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/drivers/net/hw
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2025-08-25 11:04:45 -0700
committerJakub Kicinski <kuba@kernel.org>2025-08-26 17:35:27 -0700
commitb9f4f952982877bed19176798c6c5ca455f19b33 (patch)
treeb5aaae3b4d9e8d08d7c01a2459ef058bb328268e /tools/testing/selftests/drivers/net/hw
parent6d04b36c73fdbbe2562f50271c4fe505f3dbce70 (diff)
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. Acked-by: Stanislav Fomichev <sdf@fomichev.me> Link: https://patch.msgid.link/20250825180447.2252977-4-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing/selftests/drivers/net/hw')
-rw-r--r--tools/testing/selftests/drivers/net/hw/ncdevmem.c34
1 files 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: