Re: [PATCH bpf-next v6 0/2] bpf: Add a generic bits iterator

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

 



On Thu, Apr 25, 2024 at 2:05 PM Yonghong Song <yonghong.song@xxxxxxxxx> wrote:
>
>
> On 4/24/24 10:36 PM, Yafang Shao wrote:
> > On Thu, Apr 25, 2024 at 8:34 AM Andrii Nakryiko
> > <andrii.nakryiko@xxxxxxxxx> wrote:
> >> On Thu, Apr 11, 2024 at 6:51 AM Yafang Shao <laoar.shao@xxxxxxxxx> wrote:
> >>> On Thu, Apr 11, 2024 at 9:11 PM Yafang Shao <laoar.shao@xxxxxxxxx> wrote:
> >>>> 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:
> >>>> - 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/
> >>>>
> >>>> Yafang Shao (2):
> >>>>    bpf: Add bits iterator
> >>>>    selftests/bpf: Add selftest for bits iter
> >>>>
> >>>>   kernel/bpf/helpers.c                          | 120 +++++++++++++++++
> >>>>   .../selftests/bpf/prog_tests/verifier.c       |   2 +
> >>>>   .../selftests/bpf/progs/verifier_bits_iter.c  | 127 ++++++++++++++++++
> >>>>   3 files changed, 249 insertions(+)
> >>>>   create mode 100644 tools/testing/selftests/bpf/progs/verifier_bits_iter.c
> >>>>
> >>>> --
> >>>> 2.39.1
> >>>>
> >>> It appears that the test case failed on s390x when the data is
> >>> a u32 value because we need to set the higher 32 bits.
> >>> will analyze it.
> >>>
> >> Hey Yafang, did you get a chance to debug and fix the issue?
> >>
> > Hi Andrii,
> >
> > Apologies for the delay; I recently returned from an extended holiday.
> >
> > The issue stems from the limitations of bpf_probe_read_kernel() on
> > s390 architecture. The attachment provides a straightforward example
> > to illustrate this issue. The observed results are as follows:
> >
> >      Error: #463/1 verifier_probe_read/probe read 4 bytes
> >      8897 run_subtest:PASS:obj_open_mem 0 nsec
> >      8898 run_subtest:PASS:unexpected_load_failure 0 nsec
> >      8899 do_prog_test_run:PASS:bpf_prog_test_run 0 nsec
> >      8900 run_subtest:FAIL:659 Unexpected retval: 2817064 != 512
> >
> >      Error: #463/2 verifier_probe_read/probe read 8 bytes
> >      8903 run_subtest:PASS:obj_open_mem 0 nsec
> >      8904 run_subtest:PASS:unexpected_load_failure 0 nsec
> >      8905 do_prog_test_run:PASS:bpf_prog_test_run 0 nsec
> >      8906 run_subtest:FAIL:659 Unexpected retval: 0 != 512
> >
> > More details can be found at:  https://github.com/kernel-patches/bpf/pull/6872
> >
> > Should we consider this behavior of bpf_probe_read_kernel() as
> > expected, or is it something that requires fixing?
>
> Maybe to guard the result with macros like __s390x__ to differentiate
> s390 vs. arm64/x86_64? There are some examples in prog_tests/* having
> such guards. probe_user.c:#if defined(__s390x__)
> test_bpf_syscall_macro.c:#if defined(__aarch64__) || defined(__s390__)
> xdp_adjust_tail.c:#if defined(__s390x__) xdp_do_redirect.c:#if
> defined(__s390x__)
>

That's feasible. Thank you for your suggestion. I'll make the necessary changes.

-- 
Regards
Yafang





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux