On Mon, Jul 7, 2025 at 9:04 AM Leon Hwang <leon.hwang@xxxxxxxxx> wrote: > > This patch adds libbpf support for the BPF_F_CPU flag in percpu_array maps, > introducing the following APIs: > > 1. bpf_map_update_elem_opts(): update with struct bpf_map_update_elem_opts > 2. bpf_map_lookup_elem_opts(): lookup with struct bpf_map_lookup_elem_opts > 3. bpf_map__update_elem_opts(): high-level wrapper with input validation > 4. bpf_map__lookup_elem_opts(): high-level wrapper with input validation > > Behavior: > > * If opts->cpu == (u32)~0, the update is applied to all CPUs. > * Otherwise, it applies only to the specified CPU. > * Lookup APIs retrieve values from the target CPU when BPF_F_CPU is used. > > Signed-off-by: Leon Hwang <leon.hwang@xxxxxxxxx> > --- > tools/lib/bpf/bpf.c | 23 ++++++++++++++ > tools/lib/bpf/bpf.h | 36 +++++++++++++++++++++- > tools/lib/bpf/libbpf.c | 56 +++++++++++++++++++++++++++++++---- > tools/lib/bpf/libbpf.h | 53 ++++++++++++++++++++++++++++----- > tools/lib/bpf/libbpf.map | 4 +++ > tools/lib/bpf/libbpf_common.h | 14 +++++++++ > 6 files changed, 172 insertions(+), 14 deletions(-) > LGTM, just see the note about libpbf.map file, thanks. > diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map > index 1bbf77326420..d21288991d1c 100644 > --- a/tools/lib/bpf/libbpf.map > +++ b/tools/lib/bpf/libbpf.map > @@ -436,6 +436,10 @@ LIBBPF_1.6.0 { > bpf_linker__add_buf; > bpf_linker__add_fd; > bpf_linker__new_fd; > + bpf_map__lookup_elem_opts; > + bpf_map__update_elem_opts; > + bpf_map_lookup_elem_opts; > + bpf_map_update_elem_opts; I'm planning to cut libbpf 1.6 release early next week, so for the next revision please add it into 1.7 section > bpf_object__prepare; > bpf_prog_stream_read; > bpf_program__attach_cgroup_opts; > diff --git a/tools/lib/bpf/libbpf_common.h b/tools/lib/bpf/libbpf_common.h > index 8fe248e14eb6..84ca89ace1be 100644 > --- a/tools/lib/bpf/libbpf_common.h > +++ b/tools/lib/bpf/libbpf_common.h > @@ -89,4 +89,18 @@ > memcpy(&NAME, &___##NAME, sizeof(NAME)); \ > } while (0) > > +struct bpf_map_update_elem_opts { > + size_t sz; /* size of this struct for forward/backward compatibility */ > + __u64 flags; > + __u32 cpu; > + size_t:0; > +}; > + > +struct bpf_map_lookup_elem_opts { > + size_t sz; /* size of this struct for forward/backward compatibility */ > + __u64 flags; > + __u32 cpu; > + size_t:0; > +}; > + > #endif /* __LIBBPF_LIBBPF_COMMON_H */ > -- > 2.50.0 >