1 // SPDX-License-Identifier: GPL-2.0 2 #include <test_progs.h> 3 4 void test_stacktrace_map_raw_tp(void) 5 { 6 int control_map_fd, stackid_hmap_fd, stackmap_fd; 7 const char *file = "./test_stacktrace_map.o"; 8 int efd, err, prog_fd; 9 __u32 key, val, duration = 0; 10 struct bpf_object *obj; 11 12 err = bpf_prog_load(file, BPF_PROG_TYPE_RAW_TRACEPOINT, &obj, &prog_fd); 13 if (CHECK(err, "prog_load raw tp", "err %d errno %d\n", err, errno)) 14 return; 15 16 efd = bpf_raw_tracepoint_open("sched_switch", prog_fd); 17 if (CHECK(efd < 0, "raw_tp_open", "err %d errno %d\n", efd, errno)) 18 goto close_prog; 19 20 /* find map fds */ 21 control_map_fd = bpf_find_map(__func__, obj, "control_map"); 22 if (control_map_fd < 0) 23 goto close_prog; 24 25 stackid_hmap_fd = bpf_find_map(__func__, obj, "stackid_hmap"); 26 if (stackid_hmap_fd < 0) 27 goto close_prog; 28 29 stackmap_fd = bpf_find_map(__func__, obj, "stackmap"); 30 if (stackmap_fd < 0) 31 goto close_prog; 32 33 /* give some time for bpf program run */ 34 sleep(1); 35 36 /* disable stack trace collection */ 37 key = 0; 38 val = 1; 39 bpf_map_update_elem(control_map_fd, &key, &val, 0); 40 41 /* for every element in stackid_hmap, we can find a corresponding one 42 * in stackmap, and vise versa. 43 */ 44 err = compare_map_keys(stackid_hmap_fd, stackmap_fd); 45 if (CHECK(err, "compare_map_keys stackid_hmap vs. stackmap", 46 "err %d errno %d\n", err, errno)) 47 goto close_prog; 48 49 err = compare_map_keys(stackmap_fd, stackid_hmap_fd); 50 if (CHECK(err, "compare_map_keys stackmap vs. stackid_hmap", 51 "err %d errno %d\n", err, errno)) 52 goto close_prog; 53 54 goto close_prog_noerr; 55 close_prog: 56 error_cnt++; 57 close_prog_noerr: 58 bpf_object__close(obj); 59 } 60