1. 02 9月, 2020 1 次提交
    • Y
      samples/bpf: workaround clang asm goto compilation errors · 81aa61c4
      Yonghong Song 提交于
      fix #29255532
      
      commit 6bf3bbe1f4d4cf405e3c2bf07bbdff56d3223ec8 upstream.
      
      x86 compilation has required asm goto support since 4.17.
      Since clang does not support asm goto, at 4.17,
      Commit b1ae32db ("x86/cpufeature: Guard asm_volatile_goto usage
      for BPF compilation") worked around the issue by permitting an
      alternative implementation without asm goto for clang.
      
      At 5.0, more asm goto usages appeared.
        [yhs@148 x86]$ egrep -r asm_volatile_goto
        include/asm/cpufeature.h:     asm_volatile_goto("1: jmp 6f\n"
        include/asm/jump_label.h:     asm_volatile_goto("1:"
        include/asm/jump_label.h:     asm_volatile_goto("1:"
        include/asm/rmwcc.h:  asm_volatile_goto (fullop "; j" #cc " %l[cc_label]"     \
        include/asm/uaccess.h:        asm_volatile_goto("\n"                          \
        include/asm/uaccess.h:        asm_volatile_goto("\n"                          \
        [yhs@148 x86]$
      
      Compiling samples/bpf directories, most bpf programs failed
      compilation with error messages like:
        In file included from /home/yhs/work/bpf-next/samples/bpf/xdp_sample_pkts_kern.c:2:
        In file included from /home/yhs/work/bpf-next/include/linux/ptrace.h:6:
        In file included from /home/yhs/work/bpf-next/include/linux/sched.h:15:
        In file included from /home/yhs/work/bpf-next/include/linux/sem.h:5:
        In file included from /home/yhs/work/bpf-next/include/uapi/linux/sem.h:5:
        In file included from /home/yhs/work/bpf-next/include/linux/ipc.h:9:
        In file included from /home/yhs/work/bpf-next/include/linux/refcount.h:72:
        /home/yhs/work/bpf-next/arch/x86/include/asm/refcount.h:70:9: error: 'asm goto' constructs are not supported yet
              return GEN_BINARY_SUFFIXED_RMWcc(LOCK_PREFIX "subl",
                     ^
        /home/yhs/work/bpf-next/arch/x86/include/asm/rmwcc.h:67:2: note: expanded from macro 'GEN_BINARY_SUFFIXED_RMWcc'
              __GEN_RMWcc(op " %[val], %[var]\n\t" suffix, var, cc,           \
              ^
        /home/yhs/work/bpf-next/arch/x86/include/asm/rmwcc.h:21:2: note: expanded from macro '__GEN_RMWcc'
              asm_volatile_goto (fullop "; j" #cc " %l[cc_label]"             \
              ^
        /home/yhs/work/bpf-next/include/linux/compiler_types.h:188:37: note: expanded from macro 'asm_volatile_goto'
        #define asm_volatile_goto(x...) asm goto(x)
      
      Most implementation does not even provide an alternative
      implementation. And it is also not practical to make changes
      for each call site.
      
      This patch workarounded the asm goto issue by redefining the macro like below:
        #define asm_volatile_goto(x...) asm volatile("invalid use of asm_volatile_goto")
      
      If asm_volatile_goto is not used by bpf programs, which is typically the case, nothing bad
      will happen. If asm_volatile_goto is used by bpf programs, which is incorrect, the compiler
      will issue an error since "invalid use of asm_volatile_goto" is not valid assembly codes.
      
      With this patch, all bpf programs under samples/bpf can pass compilation.
      
      Note that bpf programs under tools/testing/selftests/bpf/ compiled fine as
      they do not access kernel internal headers.
      
      Fixes: e769742d3584 ("Revert "x86/jump-labels: Macrofy inline assembly code to work around GCC inlining bugs"")
      Fixes: 18fe5822 ("x86, asm: change the GEN_*_RMWcc() macros to not quote the condition")
      Acked-by: NAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: NYonghong Song <yhs@fb.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Signed-off-by: NDust Li <dust.li@linux.alibaba.com>
      Acked-by: NJoseph Qi <joseph.qi@linux.alibaba.com>
      81aa61c4
  2. 05 12月, 2019 2 次提交
  3. 24 11月, 2019 1 次提交
  4. 21 11月, 2019 2 次提交
    • P
      samples/bpf: fix compilation failure · 73cb5485
      Prashant Bhole 提交于
      [ Upstream commit 32c009798385ce21080beaa87a9b95faad3acd1e ]
      
      following commit:
      commit d58e468b1112 ("flow_dissector: implements flow dissector BPF hook")
      added struct bpf_flow_keys which conflicts with the struct with
      same name in sockex2_kern.c and sockex3_kern.c
      
      similar to commit:
      commit 534e0e52bc23 ("samples/bpf: fix a compilation failure")
      we tried the rename it "flow_keys" but it also conflicted with struct
      having same name in include/net/flow_dissector.h. Hence renaming the
      struct to "flow_key_record". Also, this commit doesn't fix the
      compilation error completely because the similar struct is present in
      sockex3_kern.c. Hence renaming it in both files sockex3_user.c and
      sockex3_kern.c
      Signed-off-by: NPrashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
      Acked-by: NSong Liu <songliubraving@fb.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      73cb5485
    • Y
      samples/bpf: fix a compilation failure · eaa4d5ac
      Yonghong Song 提交于
      [ Upstream commit 534e0e52bc23de588e81b5a6f75e10c8c4b189fc ]
      
      samples/bpf build failed with the following errors:
      
        $ make samples/bpf/
        ...
        HOSTCC  samples/bpf/sockex3_user.o
        /data/users/yhs/work/net-next/samples/bpf/sockex3_user.c:16:8: error: redefinition of ‘struct bpf_flow_keys’
         struct bpf_flow_keys {
                ^
        In file included from /data/users/yhs/work/net-next/samples/bpf/sockex3_user.c:4:0:
        ./usr/include/linux/bpf.h:2338:9: note: originally defined here
          struct bpf_flow_keys *flow_keys;
                 ^
        make[3]: *** [samples/bpf/sockex3_user.o] Error 1
      
      Commit d58e468b1112d ("flow_dissector: implements flow dissector BPF hook")
      introduced struct bpf_flow_keys in include/uapi/linux/bpf.h and hence
      caused the naming conflict with samples/bpf/sockex3_user.c.
      
      The fix is to rename struct bpf_flow_keys in samples/bpf/sockex3_user.c
      to flow_keys to avoid the conflict.
      Signed-off-by: NYonghong Song <yhs@fb.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      eaa4d5ac
  5. 06 11月, 2019 1 次提交
  6. 14 7月, 2019 2 次提交
  7. 15 2月, 2019 1 次提交
  8. 13 2月, 2019 1 次提交
  9. 26 1月, 2019 1 次提交
    • D
      samples: bpf: fix: error handling regarding kprobe_events · 7187ac3e
      Daniel T. Lee 提交于
      [ Upstream commit 5a863813216ce79e16a8c1503b2543c528b778b6 ]
      
      Currently, kprobe_events failure won't be handled properly.
      Due to calling system() indirectly to write to kprobe_events,
      it can't be identified whether an error is derived from kprobe or system.
      
          // buf = "echo '%c:%s %s' >> /s/k/d/t/kprobe_events"
          err = system(buf);
          if (err < 0) {
              printf("failed to create kprobe ..");
              return -1;
          }
      
      For example, running ./tracex7 sample in ext4 partition,
      "echo p:open_ctree open_ctree >> /s/k/d/t/kprobe_events"
      gets 256 error code system() failure.
      => The error comes from kprobe, but it's not handled correctly.
      
      According to man of system(3), it's return value
      just passes the termination status of the child shell
      rather than treating the error as -1. (don't care success)
      
      Which means, currently it's not working as desired.
      (According to the upper code snippet)
      
          ex) running ./tracex7 with ext4 env.
          # Current Output
          sh: echo: I/O error
          failed to open event open_ctree
      
          # Desired Output
          failed to create kprobe 'open_ctree' error 'No such file or directory'
      
      The problem is, error can't be verified whether from child ps
      or system. But using write() directly can verify the command
      failure, and it will treat all error as -1. So I suggest using
      write() directly to 'kprobe_events' rather than calling system().
      Signed-off-by: NDaniel T. Lee <danieltimlee@gmail.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      7187ac3e
  10. 11 10月, 2018 1 次提交
  11. 17 8月, 2018 1 次提交
  12. 10 8月, 2018 3 次提交
  13. 03 8月, 2018 1 次提交
    • R
      samples/bpf: extend test_cgrp2_attach2 test to use cgroup storage · 28ba0687
      Roman Gushchin 提交于
      The test_cgrp2_attach test covers bpf cgroup attachment code well,
      so let's re-use it for testing allocation/releasing of cgroup storage.
      
      The extension is pretty straightforward: the bpf program will use
      the cgroup storage to save the number of transmitted bytes.
      
      Expected output:
        $ ./test_cgrp2_attach2
        Attached DROP prog. This ping in cgroup /foo should fail...
        ping: sendmsg: Operation not permitted
        Attached DROP prog. This ping in cgroup /foo/bar should fail...
        ping: sendmsg: Operation not permitted
        Attached PASS prog. This ping in cgroup /foo/bar should pass...
        Detached PASS from /foo/bar while DROP is attached to /foo.
        This ping in cgroup /foo/bar should fail...
        ping: sendmsg: Operation not permitted
        Attached PASS from /foo/bar and detached DROP from /foo.
        This ping in cgroup /foo/bar should pass...
        ### override:PASS
        ### multi:PASS
      Signed-off-by: NRoman Gushchin <guro@fb.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Acked-by: NMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      28ba0687
  14. 27 7月, 2018 4 次提交
  15. 18 7月, 2018 2 次提交
  16. 17 7月, 2018 2 次提交
  17. 14 7月, 2018 1 次提交
  18. 12 7月, 2018 1 次提交
  19. 10 7月, 2018 1 次提交
  20. 05 7月, 2018 5 次提交
  21. 03 7月, 2018 1 次提交
  22. 29 6月, 2018 3 次提交
    • D
      bpf: Change bpf_fib_lookup to return lookup status · 4c79579b
      David Ahern 提交于
      For ACLs implemented using either FIB rules or FIB entries, the BPF
      program needs the FIB lookup status to be able to drop the packet.
      Since the bpf_fib_lookup API has not reached a released kernel yet,
      change the return code to contain an encoding of the FIB lookup
      result and return the nexthop device index in the params struct.
      
      In addition, inform the BPF program of any post FIB lookup reason as
      to why the packet needs to go up the stack.
      
      The fib result for unicast routes must have an egress device, so remove
      the check that it is non-NULL.
      Signed-off-by: NDavid Ahern <dsahern@gmail.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      4c79579b
    • J
      samples/bpf: xdp_rxq_info action XDP_TX must adjust MAC-addrs · 509fda10
      Jesper Dangaard Brouer 提交于
      XDP_TX requires also changing the MAC-addrs, else some hardware
      may drop the TX packet before reaching the wire.  This was
      observed with driver mlx5.
      
      If xdp_rxq_info select --action XDP_TX the swapmac functionality
      is activated.  It is also possible to manually enable via cmdline
      option --swapmac.  This is practical if wanting to measure the
      overhead of writing/updating payload for other action types.
      Signed-off-by: NJesper Dangaard Brouer <brouer@redhat.com>
      Signed-off-by: NToke Høiland-Jørgensen <toke@toke.dk>
      Acked-by: NSong Liu <songliubraving@fb.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      509fda10
    • J
      samples/bpf: extend xdp_rxq_info to read packet payload · 0d25c43a
      Jesper Dangaard Brouer 提交于
      There is a cost associated with reading the packet data payload
      that this test ignored.  Add option --read to allow enabling
      reading part of the payload.
      
      This sample/tool helps us analyse an issue observed with a NIC
      mlx5 (ConnectX-5 Ex) and an Intel(R) Xeon(R) CPU E5-1650 v4.
      
      With no_touch of data:
      
      Running XDP on dev:mlx5p1 (ifindex:8) action:XDP_DROP options:no_touch
      XDP stats       CPU     pps         issue-pps
      XDP-RX CPU      0       14,465,157  0
      XDP-RX CPU      1       14,464,728  0
      XDP-RX CPU      2       14,465,283  0
      XDP-RX CPU      3       14,465,282  0
      XDP-RX CPU      4       14,464,159  0
      XDP-RX CPU      5       14,465,379  0
      XDP-RX CPU      total   86,789,992
      
      When not touching data, we observe that the CPUs have idle cycles.
      When reading data the CPUs are 100% busy in softirq.
      
      With reading data:
      
      Running XDP on dev:mlx5p1 (ifindex:8) action:XDP_DROP options:read
      XDP stats       CPU     pps         issue-pps
      XDP-RX CPU      0       9,620,639   0
      XDP-RX CPU      1       9,489,843   0
      XDP-RX CPU      2       9,407,854   0
      XDP-RX CPU      3       9,422,289   0
      XDP-RX CPU      4       9,321,959   0
      XDP-RX CPU      5       9,395,242   0
      XDP-RX CPU      total   56,657,828
      
      The effect seen above is a result of cache-misses occuring when
      more RXQs are being used.  Based on perf-event observations, our
      conclusion is that the CPUs DDIO (Direct Data I/O) choose to
      deliver packet into main memory, instead of L3-cache.  We also
      found, that this can be mitigated by either using less RXQs or by
      reducing NICs the RX-ring size.
      Signed-off-by: NJesper Dangaard Brouer <brouer@redhat.com>
      Signed-off-by: NToke Høiland-Jørgensen <toke@toke.dk>
      Acked-by: NSong Liu <songliubraving@fb.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      0d25c43a
  23. 27 6月, 2018 1 次提交
  24. 26 6月, 2018 1 次提交