On Wed, Jun 29, 2022 at 4:38 PM Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx> wrote: > > Currently, xsk_setup_xdp_prog() uses anonymous xsk_socket struct which > means that during xsk_create_bpf_link() call, xsk->config.xdp_flags is > always 0. This in turn means that from xdpxceiver it is impossible to > use xdpgeneric attachment, so since commit 3b22523bca02 ("selftests, > xsk: Fix bpf_res cleanup test") we were not testing SKB mode at all. > > To fix this, introduce a function, called xsk_setup_xdp_prog_xsk(), that > will load XDP prog based on the existing xsk_socket, so that xsk > context's refcount is correctly bumped and flags from application side > are respected. Use this from xdpxceiver side so we get coverage of > generic and native XDP program attach points. Acked-by: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx> > --- > tools/testing/selftests/bpf/xdpxceiver.c | 2 +- > tools/testing/selftests/bpf/xsk.c | 5 +++++ > tools/testing/selftests/bpf/xsk.h | 1 + > 3 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/bpf/xdpxceiver.c b/tools/testing/selftests/bpf/xdpxceiver.c > index 019c567b6b4e..c024aa91ea02 100644 > --- a/tools/testing/selftests/bpf/xdpxceiver.c > +++ b/tools/testing/selftests/bpf/xdpxceiver.c > @@ -1130,7 +1130,7 @@ static void thread_common_ops(struct test_spec *test, struct ifobject *ifobject) > if (!ifindex) > exit_with_error(errno); > > - ret = xsk_setup_xdp_prog(ifindex, &ifobject->xsk_map_fd); > + ret = xsk_setup_xdp_prog_xsk(ifobject->xsk->xsk, &ifobject->xsk_map_fd); > if (ret) > exit_with_error(-ret); > > diff --git a/tools/testing/selftests/bpf/xsk.c b/tools/testing/selftests/bpf/xsk.c > index fa13d2c44517..db911127720e 100644 > --- a/tools/testing/selftests/bpf/xsk.c > +++ b/tools/testing/selftests/bpf/xsk.c > @@ -880,6 +880,11 @@ static int __xsk_setup_xdp_prog(struct xsk_socket *_xdp, int *xsks_map_fd) > return err; > } > > +int xsk_setup_xdp_prog_xsk(struct xsk_socket *xsk, int *xsks_map_fd) > +{ > + return __xsk_setup_xdp_prog(xsk, xsks_map_fd); > +} > + > static struct xsk_ctx *xsk_get_ctx(struct xsk_umem *umem, int ifindex, > __u32 queue_id) > { > diff --git a/tools/testing/selftests/bpf/xsk.h b/tools/testing/selftests/bpf/xsk.h > index 915e7135337c..997723b0bfb2 100644 > --- a/tools/testing/selftests/bpf/xsk.h > +++ b/tools/testing/selftests/bpf/xsk.h > @@ -269,6 +269,7 @@ struct xsk_umem_config { > __u32 flags; > }; > > +int xsk_setup_xdp_prog_xsk(struct xsk_socket *xsk, int *xsks_map_fd); > int xsk_setup_xdp_prog(int ifindex, int *xsks_map_fd); > int xsk_socket__update_xskmap(struct xsk_socket *xsk, int xsks_map_fd); > > -- > 2.27.0 >