An error occurred fetching the project authors.
  1. 29 May, 2024 1 commit
  2. 22 May, 2024 1 commit
  3. 21 May, 2024 1 commit
  4. 20 May, 2024 1 commit
  5. 19 May, 2024 1 commit
    • Yury Norov's avatar
      MAINTAINERS: add BITOPS API record · fe708f91
      Yury Norov authored
      Bitops API is the very basic, and it's widely used by the kernel. But
      corresponding files are not maintained.
      
      Bitmaps actively use bit operations, and big share of bitops material
      already moves through the bitmap branch.
      
      I would like to take a closer look to bitops.
      
      This patch creates a BITOPS API record in the MAINTAINERS, and adds
      Rasmus as a reviewer, and myself as a maintainer of those files.
      
      CC: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarYury Norov <yury.norov@gmail.com>
      fe708f91
  6. 17 May, 2024 1 commit
  7. 15 May, 2024 1 commit
  8. 14 May, 2024 3 commits
  9. 13 May, 2024 2 commits
  10. 12 May, 2024 1 commit
    • Shahab Vahedi's avatar
      ARC: Add eBPF JIT support · f122668d
      Shahab Vahedi authored
      This will add eBPF JIT support to the 32-bit ARCv2 processors. The
      implementation is qualified by running the BPF tests on a Synopsys HSDK
      board with "ARC HS38 v2.1c at 500 MHz" as the 4-core CPU.
      
      The test_bpf.ko reports 2-10 fold improvements in execution time of its
      tests. For instance:
      
      test_bpf: #33 tcpdump port 22 jited:0 704 1766 2104 PASS
      test_bpf: #33 tcpdump port 22 jited:1 120  224  260 PASS
      
      test_bpf: #141 ALU_DIV_X: 4294967295 / 4294967295 = 1 jited:0 238 PASS
      test_bpf: #141 ALU_DIV_X: 4294967295 / 4294967295 = 1 jited:1  23 PASS
      
      test_bpf: #776 JMP32_JGE_K: all ... magnitudes jited:0 2034681 PASS
      test_bpf: #776 JMP32_JGE_K: all ... magnitudes jited:1 1020022 PASS
      
      Deployment and structure
      ------------------------
      The related codes are added to "arch/arc/net":
      
      - bpf_jit.h       -- The interface that a back-end translator must provide
      - bpf_jit_core.c  -- Knows how to handle the input eBPF byte stream
      - bpf_jit_arcv2.c -- The back-end code that knows the translation logic
      
      The bpf_int_jit_compile() at the end of bpf_jit_core.c is the entrance
      to the whole process. Normally, the translation is done in one pass,
      namely the "normal pass". In case some relocations are not known during
      this pass, some data (arc_jit_data) is allocated for the next pass to
      come. This possible next (and last) pass is called the "extra pass".
      
      1. Normal pass       # The necessary pass
           1a. Dry run       # Get the whole JIT length, epilogue offset, etc.
           1b. Emit phase    # Allocate memory and start emitting instructions
      2. Extra pass        # Only needed if there are relocations to be fixed
           2a. Patch relocations
      
      Support status
      --------------
      The JIT compiler supports BPF instructions up to "cpu=v4". However, it
      does not yet provide support for:
      
      - Tail calls
      - Atomic operations
      - 64-bit division/remainder
      - BPF_PROBE_MEM* (exception table)
      
      The result of "test_bpf" test suite on an HSDK board is:
      
      hsdk-lnx# insmod test_bpf.ko test_suite=test_bpf
      
        test_bpf: Summary: 863 PASSED, 186 FAILED, [851/851 JIT'ed]
      
      All the failing test cases are due to the ones that were not JIT'ed.
      Categorically, they can be represented as:
      
        .-----------.------------.-------------.
        | test type |   opcodes  | # of cases  |
        |-----------+------------+-------------|
        | atomic    | 0xC3, 0xDB |         149 |
        | div64     | 0x37, 0x3F |          22 |
        | mod64     | 0x97, 0x9F |          15 |
        `-----------^------------+-------------|
                                 | (total) 186 |
                                 `-------------'
      
      Setup: build config
      -------------------
      The following configs must be set to have a working JIT test:
      
        CONFIG_BPF_JIT=y
        CONFIG_BPF_JIT_ALWAYS_ON=y
        CONFIG_TEST_BPF=m
      
      The following options are not necessary for the tests module,
      but are good to have:
      
        CONFIG_DEBUG_INFO=y             # prerequisite for below
        CONFIG_DEBUG_INFO_BTF=y         # so bpftool can generate vmlinux.h
      
        CONFIG_FTRACE=y                 #
        CONFIG_BPF_SYSCALL=y            # all these options lead to
        CONFIG_KPROBE_EVENTS=y          # having CONFIG_BPF_EVENTS=y
        CONFIG_PERF_EVENTS=y            #
      
      Some BPF programs provide data through /sys/kernel/debug:
        CONFIG_DEBUG_FS=y
      arc# mount -t debugfs debugfs /sys/kernel/debug
      
      Setup: elfutils
      ---------------
      The libdw.{so,a} library that is used by pahole for processing
      the final binary must come from elfutils 0.189 or newer. The
      support for ARCv2 [1] has been added since that version.
      
      [1]
      https://sourceware.org/git/?p=elfutils.git;a=commit;h=de3d46b3e7
      
      Setup: pahole
      -------------
      The line below in linux/scripts/Makefile.btf must be commented out:
      
      pahole-flags-$(call test-ge, $(pahole-ver), 121) += --btf_gen_floats
      
      Or else, the build will fail:
      
      $ make V=1
        ...
        BTF     .btf.vmlinux.bin.o
      pahole -J --btf_gen_floats                    \
             -j --lang_exclude=rust                 \
             --skip_encoding_btf_inconsistent_proto \
             --btf_gen_optimized .tmp_vmlinux.btf
      Complex, interval and imaginary float types are not supported
      Encountered error while encoding BTF.
        ...
        BTFIDS  vmlinux
      ./tools/bpf/resolve_btfids/resolve_btfids vmlinux
      libbpf: failed to find '.BTF' ELF section in vmlinux
      FAILED: load BTF from vmlinux: No data available
      
      This is due to the fact that the ARC toolchains generate
      "complex float" DIE entries in libgcc and at the moment, pahole
      can't handle such entries.
      
      Running the tests
      -----------------
      host$ scp /bld/linux/lib/test_bpf.ko arc:
      arc # sysctl net.core.bpf_jit_enable=1
      arc # insmod test_bpf.ko test_suite=test_bpf
            ...
            test_bpf: #1048 Staggered jumps: JMP32_JSLE_X jited:1 697811 PASS
            test_bpf: Summary: 863 PASSED, 186 FAILED, [851/851 JIT'ed]
      
      Acknowledgments
      ---------------
      - Claudiu Zissulescu for his unwavering support
      - Yuriy Kolerov for testing and troubleshooting
      - Vladimir Isaev for the pahole workaround
      - Sergey Matyukevich for paving the road by adding the interpreter support
      Signed-off-by: default avatarShahab Vahedi <shahab@synopsys.com>
      Link: https://lore.kernel.org/r/20240430145604.38592-1-list+bpf@vahedi.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      f122668d
  11. 09 May, 2024 2 commits
  12. 07 May, 2024 2 commits
  13. 06 May, 2024 1 commit
  14. 05 May, 2024 3 commits
  15. 04 May, 2024 4 commits
  16. 03 May, 2024 1 commit
  17. 02 May, 2024 3 commits
  18. 01 May, 2024 4 commits
  19. 30 Apr, 2024 3 commits
  20. 29 Apr, 2024 4 commits