perf test: Fix basic bpf filtering test
authorSumanth Korikkar <sumanthk@linux.ibm.com>
Mon, 17 Aug 2020 07:27:54 +0000 (09:27 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 21 Aug 2020 13:22:23 +0000 (10:22 -0300)
BPF basic filtering test fails on s390x (when vmlinux debuginfo is
utilized instead of /proc/kallsyms)

Info:
- bpf_probe_load installs the bpf code at do_epoll_wait.
- For s390x, do_epoll_wait resolves to 3 functions including inlines.
  found inline addr: 0x43769e
  Probe point found: __s390_sys_epoll_wait+6
  found inline addr: 0x437290
  Probe point found: do_epoll_wait+0
  found inline addr: 0x4375d6
  Probe point found: __se_sys_epoll_wait+6
- add_bpf_event  creates evsel for every probe in a BPF object. This
  results in 3 evsels.

Solution:
- Expected result = 50% of the samples to be collected from epoll_wait *
  number of entries present in the evlist.

Committer testing:

  # perf test 42
  42: BPF filter                                            :
  42.1: Basic BPF filtering                                 : Ok
  42.2: BPF pinning                                         : Ok
  42.3: BPF prologue generation                             : Ok
  42.4: BPF relocation checker                              : Ok
  #

Signed-off-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
Reviewed-by: Thomas Richter <tmricht@linux.ibm.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: bpf@vger.kernel.org
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
LPU-Reference: 20200817072754.58344-1-sumanthk@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/tests/bpf.c

index 5d20bf8..cd77e33 100644 (file)
@@ -197,7 +197,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void),
                perf_mmap__read_done(&md->core);
        }
 
-       if (count != expect) {
+       if (count != expect * evlist->core.nr_entries) {
                pr_debug("BPF filter result incorrect, expected %d, got %d samples\n", expect, count);
                goto out_delete_evlist;
        }