On Fri, May 6, 2022 at 7:49 PM Feng zhou <zhoufeng.zf@xxxxxxxxxxxxx> wrote: > > From: Feng Zhou <zhoufeng.zf@xxxxxxxxxxxxx> > > Trace some functions, such as enqueue_task_fair, need to access the > corresponding cpu, not the current cpu, and bpf_map_lookup_elem percpu map > cannot do it. So add bpf_map_lookup_percpu_elem to accomplish it for > percpu_array_map, percpu_hash_map, lru_percpu_hash_map. > > The implementation method is relatively simple, refer to the implementation > method of map_lookup_elem of percpu map, increase the parameters of cpu, and > obtain it according to the specified cpu. > I don't think it's safe in general to access per-cpu data from another CPU. I'd suggest just having either a ARRAY_OF_MAPS or adding CPU ID as part of the key, if you need such a custom access pattern. > Signed-off-by: Feng Zhou <zhoufeng.zf@xxxxxxxxxxxxx> > --- > include/linux/bpf.h | 2 ++ > include/uapi/linux/bpf.h | 9 +++++++++ > kernel/bpf/arraymap.c | 15 +++++++++++++++ > kernel/bpf/core.c | 1 + > kernel/bpf/hashtab.c | 32 ++++++++++++++++++++++++++++++++ > kernel/bpf/helpers.c | 18 ++++++++++++++++++ > kernel/bpf/verifier.c | 17 +++++++++++++++-- > kernel/trace/bpf_trace.c | 2 ++ > tools/include/uapi/linux/bpf.h | 9 +++++++++ > 9 files changed, 103 insertions(+), 2 deletions(-) > [...]