On Thu, Nov 7, 2019 at 10:44 PM Song Liu <songliubraving@xxxxxx> wrote: > > > > > On Nov 7, 2019, at 8:20 PM, Andrii Nakryiko <andriin@xxxxxx> wrote: > > > > Add detection of BPF_F_MMAPABLE flag support for arrays and add it as an extra > > flag to internal global data maps, if supported by kernel. This allows users > > to memory-map global data and use it without BPF map operations, greatly > > simplifying user experience. > > > > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> > > Acked-by: Song Liu <songliubraving@xxxxxx> > > With nit below. > > > --- > > tools/lib/bpf/libbpf.c | 31 +++++++++++++++++++++++++++++-- > > 1 file changed, 29 insertions(+), 2 deletions(-) > > > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > > index fde6cb3e5d41..73607a31a068 100644 > > --- a/tools/lib/bpf/libbpf.c > > +++ b/tools/lib/bpf/libbpf.c > > @@ -142,6 +142,8 @@ struct bpf_capabilities { > > __u32 btf_func:1; > > /* BTF_KIND_VAR and BTF_KIND_DATASEC support */ > > __u32 btf_datasec:1; > > + /* BPF_F_MMAPABLE is supported for arrays */ > > + __u32 array_mmap:1; > > }; > > > > /* > > @@ -855,8 +857,6 @@ bpf_object__init_internal_map(struct bpf_object *obj, enum libbpf_map_type type, > > pr_warn("failed to alloc map name\n"); > > return -ENOMEM; > > } > > - pr_debug("map '%s' (global data): at sec_idx %d, offset %zu.\n", > > - map_name, map->sec_idx, map->sec_offset); > > > > def = &map->def; > > def->type = BPF_MAP_TYPE_ARRAY; > > @@ -864,6 +864,12 @@ bpf_object__init_internal_map(struct bpf_object *obj, enum libbpf_map_type type, > > def->value_size = data->d_size; > > def->max_entries = 1; > > def->map_flags = type == LIBBPF_MAP_RODATA ? BPF_F_RDONLY_PROG : 0; > > + if (obj->caps.array_mmap) > > + def->map_flags |= BPF_F_MMAPABLE; > > + > > + pr_debug("map '%s' (global data): at sec_idx %d, offset %zu, flags %u.\n", > > nit: Better print flags as %x. > > sure, will update