1. 05 Jun, 2024 1 commit
    • Andrii Nakryiko's avatar
      libbpf: Add BTF field iterator · 68153bb2
      Andrii Nakryiko authored
      Implement iterator-based type ID and string offset BTF field iterator.
      This is used extensively in BTF-handling code and BPF linker code for
      various sanity checks, rewriting IDs/offsets, etc. Currently this is
      implemented as visitor pattern calling custom callbacks, which makes the
      logic (especially in simple cases) unnecessarily obscure and harder to
      follow.
      
      Having equivalent functionality using iterator pattern makes for simpler
      to understand and maintain code. As we add more code for BTF processing
      logic in libbpf, it's best to switch to iterator pattern before adding
      more callback-based code.
      
      The idea for iterator-based implementation is to record offsets of
      necessary fields within fixed btf_type parts (which should be iterated
      just once), and, for kinds that have multiple members (based on vlen
      field), record where in each member necessary fields are located.
      
      Generic iteration code then just keeps track of last offset that was
      returned and handles N members correctly. Return type is just u32
      pointer, where NULL is returned when all relevant fields were already
      iterated.
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Tested-by: default avatarAlan Maguire <alan.maguire@oracle.com>
      Acked-by: default avatarEduard Zingerman <eddyz87@gmail.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Link: https://lore.kernel.org/bpf/20240605001629.4061937-2-andrii@kernel.org
      68153bb2
  2. 04 Jun, 2024 12 commits
  3. 03 Jun, 2024 14 commits
  4. 01 Jun, 2024 1 commit
  5. 30 May, 2024 8 commits
  6. 29 May, 2024 4 commits
    • Andrii Nakryiko's avatar
      Merge branch 'bpf-add-a-generic-bits-iterator' · f088cabf
      Andrii Nakryiko authored
      Yafang Shao says:
      
      ====================
      bpf: Add a generic bits iterator
      
      Three new kfuncs, namely bpf_iter_bits_{new,next,destroy}, have been
      added for the new bpf_iter_bits functionality. These kfuncs enable the
      iteration of the bits from a given address and a given number of bits.
      
      - bpf_iter_bits_new
        Initialize a new bits iterator for a given memory area. Due to the
        limitation of bpf memalloc, the max number of bits to be iterated
        over is (4096 * 8).
      - bpf_iter_bits_next
        Get the next bit in a bpf_iter_bits
      - bpf_iter_bits_destroy
        Destroy a bpf_iter_bits
      
      The bits iterator can be used in any context and on any address.
      
      Changes:
      - v7->v8:
        Refine the interface to avoid dealing with endianness (Andrii)
      - v6->v7:
        Fix endianness error for non-long-aligned data (Andrii)
      - v5->v6:
        Add positive tests (Andrii)
      - v4->v5:
        Simplify test cases (Andrii)
      - v3->v4:
        - Fix endianness error on s390x (Andrii)
        - zero-initialize kit->bits_copy and zero out nr_bits (Andrii)
      - v2->v3:
        Optimization for u64/u32 mask (Andrii)
      - v1->v2:
        Simplify the CPU number verification code to avoid the failure on s390x
        (Eduard)
      - bpf: Add bpf_iter_cpumask
        https://lwn.net/Articles/961104/
      - bpf: Add new bpf helper bpf_for_each_cpu
        https://lwn.net/Articles/939939/
      ====================
      
      Link: https://lore.kernel.org/r/20240517023034.48138-1-laoar.shao@gmail.comSigned-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      f088cabf
    • Yafang Shao's avatar
      selftests/bpf: Add selftest for bits iter · 6ba7acdb
      Yafang Shao authored
      Add test cases for the bits iter:
      
      - Positive cases
        - Bit mask representing a single word (8-byte unit)
        - Bit mask representing data spanning more than one word
        - The index of the set bit
      
      - Nagative cases
        - bpf_iter_bits_destroy() is required after calling
          bpf_iter_bits_new()
        - bpf_iter_bits_destroy() can only destroy an initialized iter
        - bpf_iter_bits_next() must use an initialized iter
        - Bit mask representing zero words
        - Bit mask representing fewer words than expected
        - Case for ENOMEM
        - Case for NULL pointer
      Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20240517023034.48138-3-laoar.shao@gmail.com
      6ba7acdb
    • Yafang Shao's avatar
      bpf: Add bits iterator · 46654159
      Yafang Shao authored
      Add three new kfuncs for the bits iterator:
      - bpf_iter_bits_new
        Initialize a new bits iterator for a given memory area. Due to the
        limitation of bpf memalloc, the max number of words (8-byte units) that
        can be iterated over is limited to (4096 / 8).
      - bpf_iter_bits_next
        Get the next bit in a bpf_iter_bits
      - bpf_iter_bits_destroy
        Destroy a bpf_iter_bits
      
      The bits iterator facilitates the iteration of the bits of a memory area,
      such as cpumask. It can be used in any context and on any address.
      Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20240517023034.48138-2-laoar.shao@gmail.com
      46654159
    • Martin KaFai Lau's avatar
      Merge branch 'use network helpers, part 5' · fbe3e847
      Martin KaFai Lau authored
      Geliang Tang says:
      
      ====================
      This patchset uses post_socket_cb callbacks of struct network_helper_opts
      to refactor do_test() in bpf_tcp_ca.c.
      
      v5:
       - address Martin's comments in v4 (thanks)
       - add patch 4, use start_server_str in test_dctcp_fallback too
       - ASSERT_* is already used in settcpca, use this helper in cc_cb (patch 3).
      
      v4:
       - address Martin's comments in v3 (thanks).
       - drop 2 patches, keep "type" as the individual arg to start_server_addr,
         connect_to_addr and start_server_str.
      
      v3:
       - Add 4 new patches, 1-3 are cleanups. 4 adds a new helper.
       - address Martin's comments in v2.
      
      v2:
       - rebased on commit "selftests/bpf: Add test for the use of new args in
       cong_control"
      ====================
      Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      fbe3e847