> On Jun 25, 2019, at 11:12 PM, Andrii Nakryiko <andriin@xxxxxx> wrote: > > For BPF_MAP_TYPE_PERF_EVENT_ARRAY typically correct size is number of > possible CPUs. This is impossible to specify at compilation time. This > change adds automatic setting of PERF_EVENT_ARRAY size to number of > system CPUs, unless non-zero size is specified explicitly. This allows > to adjust size for advanced specific cases, while providing convenient > and logical defaults. > > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> > --- > tools/lib/bpf/libbpf.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index c74cc535902a..8f2b8a081ba7 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -2114,6 +2114,7 @@ static int > bpf_object__create_maps(struct bpf_object *obj) > { > struct bpf_create_map_attr create_attr = {}; > + int nr_cpus = 0; > unsigned int i; > int err; > > @@ -2136,7 +2137,21 @@ bpf_object__create_maps(struct bpf_object *obj) > create_attr.map_flags = def->map_flags; > create_attr.key_size = def->key_size; > create_attr.value_size = def->value_size; > - create_attr.max_entries = def->max_entries; > + if (def->type == BPF_MAP_TYPE_PERF_EVENT_ARRAY && > + !def->max_entries) { > + if (!nr_cpus) > + nr_cpus = libbpf_num_possible_cpus(); > + if (nr_cpus < 0) { > + pr_warning("failed to determine number of system CPUs: %d\n", > + nr_cpus); > + return nr_cpus; I think we need to goto err_out here. Thanks, Song