mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
selftests/bpf: test_xsk: Don't exit immediately when xsk_attach fails
xsk_reattach_xdp calls exit_with_error() on failures. This exits the program immediately. It prevents the following tests from being run and isn't compliant with the CI. Add a return value to the functions handling XDP attachments to handle errors more smoothly. Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Signed-off-by: Bastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com> Link: https://lore.kernel.org/r/20251031-xsk-v7-9-39fe486593a3@bootlin.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
e645bcfb16
commit
f12f1b5d14
@@ -1643,7 +1643,7 @@ static bool xdp_prog_changed_tx(struct test_spec *test)
|
||||
return ifobj->xdp_prog != test->xdp_prog_tx || ifobj->mode != test->mode;
|
||||
}
|
||||
|
||||
static void xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_prog,
|
||||
static int xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_prog,
|
||||
struct bpf_map *xskmap, enum test_mode mode)
|
||||
{
|
||||
int err;
|
||||
@@ -1652,31 +1652,40 @@ static void xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_pro
|
||||
err = xsk_attach_xdp_program(xdp_prog, ifobj->ifindex, mode_to_xdp_flags(mode));
|
||||
if (err) {
|
||||
ksft_print_msg("Error attaching XDP program\n");
|
||||
exit_with_error(-err);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (ifobj->mode != mode && (mode == TEST_MODE_DRV || mode == TEST_MODE_ZC))
|
||||
if (!xsk_is_in_mode(ifobj->ifindex, XDP_FLAGS_DRV_MODE)) {
|
||||
ksft_print_msg("ERROR: XDP prog not in DRV mode\n");
|
||||
exit_with_error(EINVAL);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ifobj->xdp_prog = xdp_prog;
|
||||
ifobj->xskmap = xskmap;
|
||||
ifobj->mode = mode;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void xsk_attach_xdp_progs(struct test_spec *test, struct ifobject *ifobj_rx,
|
||||
static int xsk_attach_xdp_progs(struct test_spec *test, struct ifobject *ifobj_rx,
|
||||
struct ifobject *ifobj_tx)
|
||||
{
|
||||
if (xdp_prog_changed_rx(test))
|
||||
xsk_reattach_xdp(ifobj_rx, test->xdp_prog_rx, test->xskmap_rx, test->mode);
|
||||
int err = 0;
|
||||
|
||||
if (xdp_prog_changed_rx(test)) {
|
||||
err = xsk_reattach_xdp(ifobj_rx, test->xdp_prog_rx, test->xskmap_rx, test->mode);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!ifobj_tx || ifobj_tx->shared_umem)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (xdp_prog_changed_tx(test))
|
||||
xsk_reattach_xdp(ifobj_tx, test->xdp_prog_tx, test->xskmap_tx, test->mode);
|
||||
err = xsk_reattach_xdp(ifobj_tx, test->xdp_prog_tx, test->xskmap_tx, test->mode);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void clean_sockets(struct test_spec *test, struct ifobject *ifobj)
|
||||
@@ -1789,7 +1798,8 @@ static int testapp_validate_traffic(struct test_spec *test)
|
||||
}
|
||||
}
|
||||
|
||||
xsk_attach_xdp_progs(test, ifobj_rx, ifobj_tx);
|
||||
if (xsk_attach_xdp_progs(test, ifobj_rx, ifobj_tx))
|
||||
return TEST_FAILURE;
|
||||
return __testapp_validate_traffic(test, ifobj_rx, ifobj_tx);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user