selftests: ncdevmem: Remove hard-coded queue numbers

Use single last queue of the device and probe it dynamically.

Reviewed-by: Mina Almasry <almasrymina@google.com>
Reviewed-by: Joe Damato <jdamato@fastly.com>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
Link: https://patch.msgid.link/20241107181211.3934153-10-sdf@fomichev.me
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Stanislav Fomichev 2024-11-07 10:12:08 -08:00 committed by Jakub Kicinski
parent 798d822e5d
commit d4ef05d211

View file

@ -75,8 +75,8 @@ static char *server_ip;
static char *client_ip;
static char *port;
static size_t do_validation;
static int start_queue = 8;
static int num_queues = 8;
static int start_queue = -1;
static int num_queues = 1;
static char *ifname;
static unsigned int ifindex;
static unsigned int dmabuf_id;
@ -208,6 +208,33 @@ void validate_buffer(void *line, size_t size)
fprintf(stdout, "Validated buffer\n");
}
static int rxq_num(int ifindex)
{
struct ethtool_channels_get_req *req;
struct ethtool_channels_get_rsp *rsp;
struct ynl_error yerr;
struct ynl_sock *ys;
int num = -1;
ys = ynl_sock_create(&ynl_ethtool_family, &yerr);
if (!ys) {
fprintf(stderr, "YNL: %s\n", yerr.msg);
return -1;
}
req = ethtool_channels_get_req_alloc();
ethtool_channels_get_req_set_header_dev_index(req, ifindex);
rsp = ethtool_channels_get(ys, req);
if (rsp)
num = rsp->rx_count + rsp->combined_count;
ethtool_channels_get_req_free(req);
ethtool_channels_get_rsp_free(rsp);
ynl_sock_destroy(ys);
return num;
}
#define run_command(cmd, ...) \
({ \
char command[256]; \
@ -711,6 +738,15 @@ int main(int argc, char *argv[])
ifindex = if_nametoindex(ifname);
if (start_queue < 0) {
start_queue = rxq_num(ifindex) - 1;
if (start_queue < 0)
error(1, 0, "couldn't detect number of queues\n");
fprintf(stderr, "using queues %d..%d\n", start_queue, start_queue + num_queues);
}
for (; optind < argc; optind++)
fprintf(stderr, "extra arguments: %s\n", argv[optind]);