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".
Showing the changes to kernel/bpf/arraymap.c (1 of 1 file). Show all
Unified · Split
| @@ -553,6 +553,29 @@ static void bpf_fd_array_map_clear(struct bpf_map *map) · 552 unmodified lines | ||
| 553 | 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 | 579 | const struct bpf_map_ops prog_array_map_ops = { |
| 557 | 580 | .map_alloc_check = fd_array_map_alloc_check, |
| 558 | 581 | .map_alloc = array_map_alloc, |
| @@ -564,7 +587,7 @@ const struct bpf_map_ops prog_array_map_ops = { · 5 unmodified lines | ||
| 564 | 587 | .map_fd_put_ptr = prog_fd_array_put_ptr, |
| 565 | 588 | .map_fd_sys_lookup_elem = prog_fd_array_sys_lookup_elem, |
| 566 | 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 | 593 | static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file, |