linux/kernel/trace
Yonghong Song 69c087ba62 bpf: Add bpf_for_each_map_elem() helper
The bpf_for_each_map_elem() helper is introduced which
iterates all map elements with a callback function. The
helper signature looks like
  long bpf_for_each_map_elem(map, callback_fn, callback_ctx, flags)
and for each map element, the callback_fn will be called. For example,
like hashmap, the callback signature may look like
  long callback_fn(map, key, val, callback_ctx)

There are two known use cases for this. One is from upstream ([1]) where
a for_each_map_elem helper may help implement a timeout mechanism
in a more generic way. Another is from our internal discussion
for a firewall use case where a map contains all the rules. The packet
data can be compared to all these rules to decide allow or deny
the packet.

For array maps, users can already use a bounded loop to traverse
elements. Using this helper can avoid using bounded loop. For other
type of maps (e.g., hash maps) where bounded loop is hard or
impossible to use, this helper provides a convenient way to
operate on all elements.

For callback_fn, besides map and map element, a callback_ctx,
allocated on caller stack, is also passed to the callback
function. This callback_ctx argument can provide additional
input and allow to write to caller stack for output.

If the callback_fn returns 0, the helper will iterate through next
element if available. If the callback_fn returns 1, the helper
will stop iterating and returns to the bpf program. Other return
values are not used for now.

Currently, this helper is only available with jit. It is possible
to make it work with interpreter with so effort but I leave it
as the future work.

[1]: https://lore.kernel.org/bpf/20210122205415.113822-1-xiyou.wangcong@gmail.com/

Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20210226204925.3884923-1-yhs@fb.com
2021-02-26 13:23:52 -08:00
..
blktrace.c block: store a block_device pointer in struct bio 2021-01-24 18:17:20 -07:00
bpf_trace.c bpf: Add bpf_for_each_map_elem() helper 2021-02-26 13:23:52 -08:00
bpf_trace.h
fgraph.c fgraph: Initialize tracing_graph_pause at task creation 2021-01-29 15:07:32 -05:00
ftrace.c Tracing updates for 5.11 2020-12-17 13:22:17 -08:00
ftrace_internal.h
Kconfig tracing/kprobes: Do the notrace functions check without kprobes on ftrace 2021-01-11 16:09:53 -05:00
kprobe_event_gen_test.c
Makefile ftrace: Add recording of functions that caused recursion 2020-11-06 08:42:26 -05:00
power-traces.c
preemptirq_delay_test.c
ring_buffer.c Tracing updates for 5.11 2020-12-17 13:22:17 -08:00
ring_buffer_benchmark.c
rpm-traces.c
synth_event_gen_test.c tracing: Remove the useless value assignment in test_create_synth_event() 2020-11-13 12:19:52 -05:00
trace.c tracing: Check length before giving out the filter buffer 2021-02-11 14:23:37 -05:00
trace.h tracing: Disable ftrace selftests when any tracer is running 2020-12-14 12:05:03 -05:00
trace_benchmark.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_benchmark.h
trace_boot.c tracing: Disable ftrace selftests when any tracer is running 2020-12-14 12:05:03 -05:00
trace_branch.c
trace_clock.c
trace_dynevent.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_dynevent.h tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_entries.h tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_event_perf.c ftrace: Have the callbacks receive a struct ftrace_regs instead of pt_regs 2020-11-13 12:14:55 -05:00
trace_events.c tracing: Do not count ftrace events in top level enable output 2021-02-05 15:40:04 -05:00
trace_events_filter.c tracing: Clean up after filter logic rewriting 2020-11-16 12:32:34 -05:00
trace_events_filter_test.h
trace_events_hist.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_events_inject.c
trace_events_synth.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_events_trigger.c
trace_export.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_functions.c ftrace: Have the callbacks receive a struct ftrace_regs instead of pt_regs 2020-11-13 12:14:55 -05:00
trace_functions_graph.c fgraph: Make overruns 4 bytes in graph stack structure 2020-11-10 20:39:36 -05:00
trace_hwlat.c Tracing updates for 5.11 2020-12-17 13:22:17 -08:00
trace_irqsoff.c tracing: Use pause-on-trace with the latency tracers 2021-01-29 15:35:33 -05:00
trace_kdb.c
trace_kprobe.c tracing/kprobe: Fix to support kretprobe events on unloaded modules 2021-01-29 15:39:48 -05:00
trace_kprobe_selftest.c
trace_kprobe_selftest.h
trace_mmiotrace.c
trace_nop.c
trace_output.c ftrace: Add recording of functions that caused recursion 2020-11-06 08:42:26 -05:00
trace_output.h ftrace: Add recording of functions that caused recursion 2020-11-06 08:42:26 -05:00
trace_preemptirq.c lockdep: fix order in trace_hardirqs_off_caller() 2020-09-14 10:08:07 +02:00
trace_printk.c Updates for tracing and bootconfig: 2020-10-15 15:51:28 -07:00
trace_probe.c
trace_probe.h tracing: Move is_good_name() from trace_probe.h to trace.h 2020-10-15 12:01:13 -04:00
trace_probe_tmpl.h
trace_recursion_record.c ftrace: Add recording of functions that caused recursion 2020-11-06 08:42:26 -05:00
trace_sched_switch.c
trace_sched_wakeup.c ftrace: Have the callbacks receive a struct ftrace_regs instead of pt_regs 2020-11-13 12:14:55 -05:00
trace_selftest.c tracing: Disable ftrace selftests when any tracer is running 2020-12-14 12:05:03 -05:00
trace_selftest_dynamic.c
trace_seq.c
trace_stack.c ftrace: Have the callbacks receive a struct ftrace_regs instead of pt_regs 2020-11-13 12:14:55 -05:00
trace_stat.c tracing: make tracing_init_dentry() returns an integer instead of a d_entry pointer 2020-09-18 22:17:14 -04:00
trace_stat.h
trace_synth.h tracing: Add support for dynamic strings to synthetic events 2020-10-05 19:32:18 -04:00
trace_syscalls.c
trace_uprobe.c tracing/uprobes: Support perf-style return probe 2020-09-21 21:06:03 -04:00
tracing_map.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
tracing_map.h tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00