Re: [PATCH bpf-next v3 2/5] selftests/bpf: xsk selftests - SKB POLL, NOPOLL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 27 Nov 2020 at 04:31, Yonghong Song <yhs@xxxxxx> wrote:
>
>
>
> On 11/25/20 10:37 AM, Weqaar Janjua wrote:
> > Adds following tests:
> >
> > 1. AF_XDP SKB mode
> >     Generic mode XDP is driver independent, used when the driver does
> >     not have support for XDP. Works on any netdevice using sockets and
> >     generic XDP path. XDP hook from netif_receive_skb().
> >     a. nopoll - soft-irq processing
> >     b. poll - using poll() syscall
> >
> > Signed-off-by: Weqaar Janjua <weqaar.a.janjua@xxxxxxxxx>
> > ---
> >   tools/testing/selftests/bpf/Makefile     |   2 +-
> >   tools/testing/selftests/bpf/test_xsk.sh  |  36 +-
> >   tools/testing/selftests/bpf/xdpxceiver.c | 961 +++++++++++++++++++++++
> >   tools/testing/selftests/bpf/xdpxceiver.h | 151 ++++
> >   tools/testing/selftests/bpf/xsk_env.sh   |  17 +
> >   5 files changed, 1158 insertions(+), 9 deletions(-)
> >   create mode 100644 tools/testing/selftests/bpf/xdpxceiver.c
> >   create mode 100644 tools/testing/selftests/bpf/xdpxceiver.h
> >
> > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> > index 596ee5c27906..a2be2725be11 100644
> > --- a/tools/testing/selftests/bpf/Makefile
> > +++ b/tools/testing/selftests/bpf/Makefile
> > @@ -83,7 +83,7 @@ TEST_PROGS_EXTENDED := with_addr.sh \
> >   # Compile but not part of 'make run_tests'
> >   TEST_GEN_PROGS_EXTENDED = test_sock_addr test_skb_cgroup_id_user \
> >       flow_dissector_load test_flow_dissector test_tcp_check_syncookie_user \
> > -     test_lirc_mode2_user xdping test_cpp runqslower bench
> > +     test_lirc_mode2_user xdping test_cpp runqslower bench xdpxceiver
> >
> >   TEST_CUSTOM_PROGS = urandom_read
> >
> [...]
> > +
> > +static void parse_command_line(int argc, char **argv)
> > +{
> > +     int option_index, interface_index = 0, c;
> > +
> > +     opterr = 0;
> > +
> > +     for (;;) {
> > +             c = getopt_long(argc, argv, "i:q:pScDC:", long_options, &option_index);
> > +
> > +             if (c == -1)
> > +                     break;
> > +
> > +             switch (c) {
> > +             case 'i':
> > +                     if (interface_index == MAX_INTERFACES)
> > +                             break;
> > +                     char *sptr, *token;
> > +
> > +                     memcpy(ifdict[interface_index]->ifname,
> > +                            strtok_r(optarg, ",", &sptr), MAX_INTERFACE_NAME_CHARS);
>
> During compilation, I hit the following compiler warnings,
>
> xdpxceiver.c: In function ‘main’:
> xdpxceiver.c:461:4: warning: ‘__s’ may be used uninitialized in this
> function [-Wmaybe-uninitialized]
>      memcpy(ifdict[interface_index]->ifname,
>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>             strtok_r(optarg, ",", &sptr), MAX_INTERFACE_NAME_CHARS);
>             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> xdpxceiver.c:443:13: note: ‘__s’ was declared here
>   static void parse_command_line(int argc, char **argv)
>               ^~~~~~~~~~~~~~~~~~
>
> I am using gcc8. I am not sure whether we should silence such
> warning or not (-Wno-maybe-uninitialized). Did you see such a warning
> during your compilation?
>
Most probably you have hit gcc bug 71701, we do not see this warning
as our gcc builds might be different even though mine is 8, I will try
to get rid of strtok_r to avoid the whole thing.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71701

> > +                     token = strtok_r(NULL, ",", &sptr);
> > +                     if (token)
> > +                             memcpy(ifdict[interface_index]->nsname, token,
> > +                                    MAX_INTERFACES_NAMESPACE_CHARS);
> > +                     interface_index++;
> > +                     break;
> > +             case 'q':
> > +                     opt_queue = atoi(optarg);
> > +                     break;
> > +             case 'p':
> > +                     opt_poll = 1;
> > +                     break;
> > +             case 'S':
> > +                     opt_xdp_flags |= XDP_FLAGS_SKB_MODE;
> > +                     opt_xdp_bind_flags |= XDP_COPY;
> > +                     uut = ORDER_CONTENT_VALIDATE_XDP_SKB;
> > +                     break;
> > +             case 'c':
> > +                     opt_xdp_bind_flags |= XDP_COPY;
> > +                     break;
> > +             case 'D':
> > +                     debug_pkt_dump = 1;
> > +                     break;
> > +             case 'C':
> > +                     opt_pkt_count = atoi(optarg);
> > +                     break;
> > +             default:
> > +                     usage(basename(argv[0]));
> > +                     ksft_exit_xfail();
> > +             }
> > +     }
> > +
> > +     if (!validate_interfaces()) {
> > +             usage(basename(argv[0]));
> > +             ksft_exit_xfail();
> > +     }
> > +}
> > +
> [...]




[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux