BPF List
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: Yafang Shao <laoar.shao@gmail.com>,
	Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: ast@kernel.org, daniel@iogearbox.net, john.fastabend@gmail.com,
	andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com,
	song@kernel.org, kpsingh@kernel.org, sdf@google.com,
	haoluo@google.com, jolsa@kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next v6 0/2] bpf: Add a generic bits iterator
Date: Wed, 24 Apr 2024 23:05:34 -0700	[thread overview]
Message-ID: <f455382b-d983-48d7-831d-f2ae4b8757b3@linux.dev> (raw)
In-Reply-To: <CALOAHbBBDwxBGOrDWqGf2b8bRRii8DnBHCU9cAbp_Sw-Q6XKBA@mail.gmail.com>


On 4/24/24 10:36 PM, Yafang Shao wrote:
> On Thu, Apr 25, 2024 at 8:34 AM Andrii Nakryiko
> <andrii.nakryiko@gmail.com> wrote:
>> On Thu, Apr 11, 2024 at 6:51 AM Yafang Shao <laoar.shao@gmail.com> wrote:
>>> On Thu, Apr 11, 2024 at 9:11 PM Yafang Shao <laoar.shao@gmail.com> 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__)


  reply	other threads:[~2024-04-25  6:05 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-11 13:11 [PATCH bpf-next v6 0/2] bpf: Add a generic bits iterator Yafang Shao
2024-04-11 13:11 ` [PATCH bpf-next v6 1/2] bpf: Add " Yafang Shao
2024-04-11 13:11 ` [PATCH bpf-next v6 2/2] selftests/bpf: Add selftest for bits iter Yafang Shao
2024-04-11 13:50 ` [PATCH bpf-next v6 0/2] bpf: Add a generic bits iterator Yafang Shao
2024-04-25  0:34   ` Andrii Nakryiko
2024-04-25  5:36     ` Yafang Shao
2024-04-25  6:05       ` Yonghong Song [this message]
2024-04-25  8:03         ` Yafang Shao
2024-04-25 18:15       ` Andrii Nakryiko
2024-04-26  5:04         ` Yafang Shao
2024-04-26 16:50           ` Andrii Nakryiko
2024-04-28 13:47             ` Yafang Shao
2024-04-29 16:27               ` Andrii Nakryiko
2024-05-01  2:12                 ` Yafang Shao
2024-05-01  4:14                   ` Andrii Nakryiko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f455382b-d983-48d7-831d-f2ae4b8757b3@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=laoar.shao@gmail.com \
    --cc=martin.lau@linux.dev \
    --cc=sdf@google.com \
    --cc=song@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox