Message ID | 20221111092642.2333724-2-houtao@huaweicloud.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | libbpf: Fixes for ring buffer | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Clearly marked for bpf |
netdev/fixes_present | success | Fixes tag present in non-next series |
netdev/subject_prefix | success | Link |
netdev/cover_letter | success | Series has a cover letter |
netdev/patch_count | success | Link |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/cc_maintainers | success | CCed 12 of 12 maintainers |
netdev/build_clang | success | Errors and warnings before: 0 this patch: 0 |
netdev/module_param | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 22 lines checked |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
bpf/vmtest-bpf-VM_Test-3 | fail | Logs for build for aarch64 with gcc |
bpf/vmtest-bpf-VM_Test-4 | fail | Logs for build for aarch64 with llvm-16 |
bpf/vmtest-bpf-VM_Test-5 | success | Logs for build for s390x with gcc |
bpf/vmtest-bpf-VM_Test-6 | success | Logs for build for x86_64 with gcc |
bpf/vmtest-bpf-VM_Test-7 | success | Logs for build for x86_64 with llvm-16 |
bpf/vmtest-bpf-VM_Test-8 | success | Logs for llvm-toolchain |
bpf/vmtest-bpf-VM_Test-9 | success | Logs for set-matrix |
bpf/vmtest-bpf-PR | success | PR summary |
bpf/vmtest-bpf-VM_Test-2 | success | Logs for llvm-toolchain |
bpf/vmtest-bpf-VM_Test-1 | success | Logs for ShellCheck |
On 11/11, Hou Tao wrote: > From: Hou Tao <houtao1@huawei.com> > Adjusting the size of ring buffer when probing ring buffer map, else > the probe may fail on host with 64KB page size (e.g., an ARM64 host). > After the fix, the output of "bpftool feature" on above host will be > correct. > Before : > eBPF map_type ringbuf is NOT available > eBPF map_type user_ringbuf is NOT available > After : > eBPF map_type ringbuf is available > eBPF map_type user_ringbuf is available > Signed-off-by: Hou Tao <houtao1@huawei.com> > --- > tools/lib/bpf/libbpf.c | 2 +- > tools/lib/bpf/libbpf_internal.h | 2 ++ > tools/lib/bpf/libbpf_probes.c | 2 +- > 3 files changed, 4 insertions(+), 2 deletions(-) > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 184ce1684dcd..907f735568ae 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -2353,7 +2353,7 @@ int parse_btf_map_def(const char *map_name, struct > btf *btf, > return 0; > } > -static size_t adjust_ringbuf_sz(size_t sz) > +size_t adjust_ringbuf_sz(size_t sz) > { > __u32 page_sz = sysconf(_SC_PAGE_SIZE); > __u32 mul; > diff --git a/tools/lib/bpf/libbpf_internal.h > b/tools/lib/bpf/libbpf_internal.h > index 377642ff51fc..99dc4d6a19be 100644 > --- a/tools/lib/bpf/libbpf_internal.h > +++ b/tools/lib/bpf/libbpf_internal.h > @@ -576,4 +576,6 @@ static inline bool is_pow_of_2(size_t x) > #define PROG_LOAD_ATTEMPTS 5 > int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size, int > attempts); > +size_t adjust_ringbuf_sz(size_t sz); > + > #endif /* __LIBBPF_LIBBPF_INTERNAL_H */ > diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c > index f3a8e8e74eb8..29a1db2645fd 100644 > --- a/tools/lib/bpf/libbpf_probes.c > +++ b/tools/lib/bpf/libbpf_probes.c > @@ -234,7 +234,7 @@ static int probe_map_create(enum bpf_map_type > map_type) > case BPF_MAP_TYPE_USER_RINGBUF: > key_size = 0; > value_size = 0; > - max_entries = 4096; > + max_entries = adjust_ringbuf_sz(4096); Why not pass PAGE_SIZE directly here? Something like: max_entries = sysconf(_SC_PAGE_SIZE); ? > break; > case BPF_MAP_TYPE_STRUCT_OPS: > /* we'll get -ENOTSUPP for invalid BTF type ID for struct_ops */ > -- > 2.29.2
Hi, On 11/12/2022 1:47 AM, sdf@google.com wrote: > On 11/11, Hou Tao wrote: >> From: Hou Tao <houtao1@huawei.com> > >> Adjusting the size of ring buffer when probing ring buffer map, else >> the probe may fail on host with 64KB page size (e.g., an ARM64 host). > >> After the fix, the output of "bpftool feature" on above host will be >> correct. > >> Before : >> eBPF map_type ringbuf is NOT available >> eBPF map_type user_ringbuf is NOT available > >> After : >> eBPF map_type ringbuf is available >> eBPF map_type user_ringbuf is available > >> Signed-off-by: Hou Tao <houtao1@huawei.com> >> --- >> tools/lib/bpf/libbpf.c | 2 +- >> tools/lib/bpf/libbpf_internal.h | 2 ++ >> tools/lib/bpf/libbpf_probes.c | 2 +- >> 3 files changed, 4 insertions(+), 2 deletions(-) SNIP > >> #endif /* __LIBBPF_LIBBPF_INTERNAL_H */ >> diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c >> index f3a8e8e74eb8..29a1db2645fd 100644 >> --- a/tools/lib/bpf/libbpf_probes.c >> +++ b/tools/lib/bpf/libbpf_probes.c >> @@ -234,7 +234,7 @@ static int probe_map_create(enum bpf_map_type map_type) >> case BPF_MAP_TYPE_USER_RINGBUF: >> key_size = 0; >> value_size = 0; >> - max_entries = 4096; >> + max_entries = adjust_ringbuf_sz(4096); > > Why not pass PAGE_SIZE directly here? Something like: > > max_entries = sysconf(_SC_PAGE_SIZE); > > ? Good idea. Will do that in v2. > >> break; >> case BPF_MAP_TYPE_STRUCT_OPS: >> /* we'll get -ENOTSUPP for invalid BTF type ID for struct_ops */ >> -- >> 2.29.2
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 184ce1684dcd..907f735568ae 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -2353,7 +2353,7 @@ int parse_btf_map_def(const char *map_name, struct btf *btf, return 0; } -static size_t adjust_ringbuf_sz(size_t sz) +size_t adjust_ringbuf_sz(size_t sz) { __u32 page_sz = sysconf(_SC_PAGE_SIZE); __u32 mul; diff --git a/tools/lib/bpf/libbpf_internal.h b/tools/lib/bpf/libbpf_internal.h index 377642ff51fc..99dc4d6a19be 100644 --- a/tools/lib/bpf/libbpf_internal.h +++ b/tools/lib/bpf/libbpf_internal.h @@ -576,4 +576,6 @@ static inline bool is_pow_of_2(size_t x) #define PROG_LOAD_ATTEMPTS 5 int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size, int attempts); +size_t adjust_ringbuf_sz(size_t sz); + #endif /* __LIBBPF_LIBBPF_INTERNAL_H */ diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index f3a8e8e74eb8..29a1db2645fd 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -234,7 +234,7 @@ static int probe_map_create(enum bpf_map_type map_type) case BPF_MAP_TYPE_USER_RINGBUF: key_size = 0; value_size = 0; - max_entries = 4096; + max_entries = adjust_ringbuf_sz(4096); break; case BPF_MAP_TYPE_STRUCT_OPS: /* we'll get -ENOTSUPP for invalid BTF type ID for struct_ops */