Commit e645bcfb authored by Bastien Curutchet (eBPF Foundation)'s avatar Bastien Curutchet (eBPF Foundation) Committed by Alexei Starovoitov
Browse files

selftests/bpf: test_xsk: Add return value to init_iface()



init_iface() doesn't have any return value while it can fail. In case of
failure it calls exit_on_error() which exits the application
immediately. This prevents the following tests from being run and isn't
compliant with the CI

Add a return value to init_iface() so errors can be handled more
smoothly.

Reviewed-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: default avatarBastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com>
Link: https://lore.kernel.org/r/20251031-xsk-v7-8-39fe486593a3@bootlin.com


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent f477b0fd
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -2189,7 +2189,7 @@ static bool hugepages_present(void)
	return true;
}

void init_iface(struct ifobject *ifobj, thread_func_t func_ptr)
int init_iface(struct ifobject *ifobj, thread_func_t func_ptr)
{
	LIBBPF_OPTS(bpf_xdp_query_opts, query_opts);
	int err;
@@ -2199,7 +2199,7 @@ void init_iface(struct ifobject *ifobj, thread_func_t func_ptr)
	err = xsk_load_xdp_programs(ifobj);
	if (err) {
		ksft_print_msg("Error loading XDP program\n");
		exit_with_error(err);
		return err;
	}

	if (hugepages_present())
@@ -2208,7 +2208,7 @@ void init_iface(struct ifobject *ifobj, thread_func_t func_ptr)
	err = bpf_xdp_query(ifobj->ifindex, XDP_FLAGS_DRV_MODE, &query_opts);
	if (err) {
		ksft_print_msg("Error querying XDP capabilities\n");
		exit_with_error(-err);
		return err;
	}
	if (query_opts.feature_flags & NETDEV_XDP_ACT_RX_SG)
		ifobj->multi_buff_supp = true;
@@ -2220,6 +2220,8 @@ void init_iface(struct ifobject *ifobj, thread_func_t func_ptr)
			ifobj->xdp_zc_max_segs = 0;
		}
	}

	return 0;
}

int testapp_send_receive(struct test_spec *test)
+1 −1
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ struct ifobject {
};
struct ifobject *ifobject_create(void);
void ifobject_delete(struct ifobject *ifobj);
void init_iface(struct ifobject *ifobj, thread_func_t func_ptr);
int init_iface(struct ifobject *ifobj, thread_func_t func_ptr);

int xsk_configure_umem(struct ifobject *ifobj, struct xsk_umem_info *umem, void *buffer, u64 size);
int xsk_configure_socket(struct xsk_socket_info *xsk, struct xsk_umem_info *umem,
+5 −2
Original line number Diff line number Diff line
@@ -373,8 +373,11 @@ int main(int argc, char **argv)
		ifobj_tx->set_ring.default_rx = ifobj_tx->ring.rx_pending;
	}

	init_iface(ifobj_rx, worker_testapp_validate_rx);
	init_iface(ifobj_tx, worker_testapp_validate_tx);
	if (init_iface(ifobj_rx, worker_testapp_validate_rx) ||
	    init_iface(ifobj_tx, worker_testapp_validate_tx)) {
		ksft_print_msg("Error : can't initialize interfaces\n");
		ksft_exit_xfail();
	}

	test_init(&test, ifobj_tx, ifobj_rx, 0, &tests[0]);
	tx_pkt_stream_default = pkt_stream_generate(DEFAULT_PKT_CNT, MIN_PKT_SIZE);