diff options
author | Yonghong Song <yhs@fb.com> | 2018-09-06 20:26:04 -0400 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2018-09-11 17:17:24 -0400 |
commit | a7c19db38d62fc1ce797dba19936e9f81cf2b9fb (patch) | |
tree | 15272c1f537fde1b721005ab92b7d14875285024 | |
parent | f6f3bac08ff9855d803081a353a1fafaa8845739 (diff) |
bpf: add bpffs pretty print for program array map
Added bpffs pretty print for program array map. For a particular
array index, if the program array points to a valid program,
the "<index>: <prog_id>" will be printed out like
0: 6
which means bpf program with id "6" is installed at index "0".
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
-rw-r--r-- | kernel/bpf/arraymap.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c index f9d24121be99..dded84cbe814 100644 --- a/kernel/bpf/arraymap.c +++ b/kernel/bpf/arraymap.c | |||
@@ -553,6 +553,29 @@ static void bpf_fd_array_map_clear(struct bpf_map *map) | |||
553 | fd_array_map_delete_elem(map, &i); | 553 | fd_array_map_delete_elem(map, &i); |
554 | } | 554 | } |
555 | 555 | ||
556 | static void prog_array_map_seq_show_elem(struct bpf_map *map, void *key, | ||
557 | struct seq_file *m) | ||
558 | { | ||
559 | void **elem, *ptr; | ||
560 | u32 prog_id; | ||
561 | |||
562 | rcu_read_lock(); | ||
563 | |||
564 | elem = array_map_lookup_elem(map, key); | ||
565 | if (elem) { | ||
566 | ptr = READ_ONCE(*elem); | ||
567 | if (ptr) { | ||
568 | seq_printf(m, "%u: ", *(u32 *)key); | ||
569 | prog_id = prog_fd_array_sys_lookup_elem(ptr); | ||
570 | btf_type_seq_show(map->btf, map->btf_value_type_id, | ||
571 | &prog_id, m); | ||
572 | seq_puts(m, "\n"); | ||
573 | } | ||
574 | } | ||
575 | |||
576 | rcu_read_unlock(); | ||
577 | } | ||
578 | |||
556 | const struct bpf_map_ops prog_array_map_ops = { | 579 | const struct bpf_map_ops prog_array_map_ops = { |
557 | .map_alloc_check = fd_array_map_alloc_check, | 580 | .map_alloc_check = fd_array_map_alloc_check, |
558 | .map_alloc = array_map_alloc, | 581 | .map_alloc = array_map_alloc, |
@@ -564,7 +587,7 @@ const struct bpf_map_ops prog_array_map_ops = { | |||
564 | .map_fd_put_ptr = prog_fd_array_put_ptr, | 587 | .map_fd_put_ptr = prog_fd_array_put_ptr, |
565 | .map_fd_sys_lookup_elem = prog_fd_array_sys_lookup_elem, | 588 | .map_fd_sys_lookup_elem = prog_fd_array_sys_lookup_elem, |
566 | .map_release_uref = bpf_fd_array_map_clear, | 589 | .map_release_uref = bpf_fd_array_map_clear, |
567 | .map_check_btf = map_check_no_btf, | 590 | .map_seq_show_elem = prog_array_map_seq_show_elem, |
568 | }; | 591 | }; |
569 | 592 | ||
570 | static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file, | 593 | static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file, |