mirror of https://gitee.com/openkylin/linux.git
46 lines
1.2 KiB
ReStructuredText
46 lines
1.2 KiB
ReStructuredText
==================
|
|
BPF Selftest Notes
|
|
==================
|
|
General instructions on running selftests can be found in
|
|
`Documentation/bpf/bpf_devel_QA.rst`_.
|
|
|
|
Additional information about selftest failures are
|
|
documented here.
|
|
|
|
bpf_iter test failures with clang/llvm 10.0.0
|
|
=============================================
|
|
|
|
With clang/llvm 10.0.0, the following two bpf_iter tests failed:
|
|
* ``bpf_iter/ipv6_route``
|
|
* ``bpf_iter/netlink``
|
|
|
|
The symptom for ``bpf_iter/ipv6_route`` looks like
|
|
|
|
.. code-block:: c
|
|
|
|
2: (79) r8 = *(u64 *)(r1 +8)
|
|
...
|
|
14: (bf) r2 = r8
|
|
15: (0f) r2 += r1
|
|
; BPF_SEQ_PRINTF(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen);
|
|
16: (7b) *(u64 *)(r8 +64) = r2
|
|
only read is supported
|
|
|
|
The symptom for ``bpf_iter/netlink`` looks like
|
|
|
|
.. code-block:: c
|
|
|
|
; struct netlink_sock *nlk = ctx->sk;
|
|
2: (79) r7 = *(u64 *)(r1 +8)
|
|
...
|
|
15: (bf) r2 = r7
|
|
16: (0f) r2 += r1
|
|
; BPF_SEQ_PRINTF(seq, "%pK %-3d ", s, s->sk_protocol);
|
|
17: (7b) *(u64 *)(r7 +0) = r2
|
|
only read is supported
|
|
|
|
This is due to a llvm BPF backend bug. The fix
|
|
https://reviews.llvm.org/D78466
|
|
has been pushed to llvm 10.x release branch and will be
|
|
available in 10.0.1. The fix is available in llvm 11.0.0 trunk.
|