diff options
Diffstat (limited to 'kernel/bpf')
-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, |