On Tue, Apr 20, 2021 at 8:58 AM Daniel Borkmann <dan...@iogearbox.net> wrote: > > On 4/20/21 3:17 AM, Alexei Starovoitov wrote: > > On Thu, Apr 15, 2021 at 10:47 AM Pedro Tammela <pctamm...@gmail.com> wrote: > >> > >> Andrii suggested to remove this abstraction layer and have the percpu > >> handling more explicit[1]. > >> > >> This patch also updates the tests that relied on the macros. > >> > >> [1] > >> https://lore.kernel.org/bpf/caef4bzymj_zpdq8zi4dbntbojkrpu2tvopysbnrdd9fohtf...@mail.gmail.com/ > >> > >> Suggested-by: Andrii Nakryiko <and...@kernel.org> > >> Signed-off-by: Pedro Tammela <pctamm...@mojatatu.com> > >> --- > >> tools/testing/selftests/bpf/bpf_util.h | 7 -- > >> .../bpf/map_tests/htab_map_batch_ops.c | 87 +++++++++---------- > >> .../selftests/bpf/prog_tests/map_init.c | 9 +- > >> tools/testing/selftests/bpf/test_maps.c | 84 +++++++++++------- > >> 4 files changed, 96 insertions(+), 91 deletions(-) > >> > >> diff --git a/tools/testing/selftests/bpf/bpf_util.h > >> b/tools/testing/selftests/bpf/bpf_util.h > >> index a3352a64c067..105db3120ab4 100644 > >> --- a/tools/testing/selftests/bpf/bpf_util.h > >> +++ b/tools/testing/selftests/bpf/bpf_util.h > >> @@ -20,13 +20,6 @@ static inline unsigned int bpf_num_possible_cpus(void) > >> return possible_cpus; > >> } > >> > >> -#define __bpf_percpu_val_align __attribute__((__aligned__(8))) > >> - > >> -#define BPF_DECLARE_PERCPU(type, name) \ > >> - struct { type v; /* padding */ } __bpf_percpu_val_align \ > >> - name[bpf_num_possible_cpus()] > >> -#define bpf_percpu(name, cpu) name[(cpu)].v > >> - > > > > Hmm. I wonder what Daniel has to say about it, since he > > introduced it in commit f3515b5d0b71 ("bpf: provide a generic macro > > for percpu values for selftests") > > to address a class of bugs. > > I would probably even move those into libbpf instead. ;-) The problem is that > this can > be missed easily and innocent changes would lead to corruption of the > applications > memory if there's a map lookup. Having this at least in selftest code or even > in libbpf > would document code-wise that care needs to be taken on per cpu maps. Even if > we'd put > a note under Documentation/bpf/ or such, this might get missed easily and > finding such > bugs is like looking for a needle in a haystack.. so I don't think this > should be removed. >
See [0] for previous discussion. I don't mind leaving bpf_percpu() in selftests. I'm not sure I ever suggested removing it from selftests, but I don't think it's a good idea to add it to libbpf. I think it's better to have an extra paragraph in bpf_lookup_map_elem() in uapi/linux/bpf.h mentioning how per-CPU values should be read/updated. I think we should just recommend to use u64 for primitive values (or otherwise users can embed their int in custom aligned(8) struct, if they insist on <u64) and __attribute__((aligned(8))) for structs. [0] https://lore.kernel.org/bpf/caef4bzalkm_fy4oo4rdp76q2koc6yc1wcjluehozuu9jobg...@mail.gmail.com/ > Thanks, > Daniel