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__)
next prev parent 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