On 12/11/19 2:33 PM, Brian Vazquez wrote: > From: Yonghong Song <yhs@xxxxxx> > > Tested bpf_map_lookup_batch(), bpf_map_lookup_and_delete_batch(), > bpf_map_update_batch(), and bpf_map_delete_batch() functionality. > $ ./test_maps > ... > test_htab_map_batch_ops:PASS > test_htab_percpu_map_batch_ops:PASS > ... > > Signed-off-by: Yonghong Song <yhs@xxxxxx> > Signed-off-by: Brian Vazquez <brianvv@xxxxxxxxxx> > --- > .../bpf/map_tests/htab_map_batch_ops.c | 269 ++++++++++++++++++ > 1 file changed, 269 insertions(+) > create mode 100644 tools/testing/selftests/bpf/map_tests/htab_map_batch_ops.c > > diff --git a/tools/testing/selftests/bpf/map_tests/htab_map_batch_ops.c b/tools/testing/selftests/bpf/map_tests/htab_map_batch_ops.c > new file mode 100644 > index 0000000000000..dabc4d420a10e > --- /dev/null > +++ b/tools/testing/selftests/bpf/map_tests/htab_map_batch_ops.c > @@ -0,0 +1,269 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* Copyright (c) 2019 Facebook */ > +#include <stdio.h> > +#include <errno.h> > +#include <string.h> > + > +#include <bpf/bpf.h> > +#include <bpf/libbpf.h> > + > +#include <bpf_util.h> > +#include <test_maps.h> > + > +static void map_batch_update(int map_fd, __u32 max_entries, int *keys, > + void *values, bool is_pcpu) > +{ > + typedef BPF_DECLARE_PERCPU(int, value); > + int i, j, err; > + value *v; We can initialize the above 'v' to 'v = NULL'. Some compiler may not be smart enough to find out 'v' is always initialized. > + > + if (is_pcpu) > + v = (value *)values; > + > + for (i = 0; i < max_entries; i++) { > + keys[i] = i + 1; > + if (is_pcpu) > + for (j = 0; j < bpf_num_possible_cpus(); j++) > + bpf_percpu(v[i], j) = i + 2 + j; > + else > + ((int *)values)[i] = i + 2; > + } > + > + err = bpf_map_update_batch(map_fd, keys, values, &max_entries, 0, 0); > + CHECK(err, "bpf_map_update_batch()", "error:%s\n", strerror(errno)); > +} > + [...]