| 
3 | 3 | 
 
  | 
4 | 4 | void test_stacktrace_map(void)  | 
5 | 5 | {  | 
6 |  | -	int control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd;  | 
 | 6 | +	int control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd, stack_key_map_fd;  | 
7 | 7 | 	const char *prog_name = "oncpu";  | 
8 | 8 | 	int err, prog_fd, stack_trace_len;  | 
9 | 9 | 	const char *file = "./test_stacktrace_map.bpf.o";  | 
10 | 10 | 	__u32 key, val, duration = 0;  | 
11 | 11 | 	struct bpf_program *prog;  | 
12 | 12 | 	struct bpf_object *obj;  | 
13 | 13 | 	struct bpf_link *link;  | 
 | 14 | +	__u32 stack_id;  | 
 | 15 | +	char val_buf[PERF_MAX_STACK_DEPTH *  | 
 | 16 | +		sizeof(struct bpf_stack_build_id)];  | 
14 | 17 | 
 
  | 
15 | 18 | 	err = bpf_prog_test_load(file, BPF_PROG_TYPE_TRACEPOINT, &obj, &prog_fd);  | 
16 | 19 | 	if (CHECK(err, "prog_load", "err %d errno %d\n", err, errno))  | 
@@ -41,6 +44,10 @@ void test_stacktrace_map(void)  | 
41 | 44 | 	if (CHECK_FAIL(stack_amap_fd < 0))  | 
42 | 45 | 		goto disable_pmu;  | 
43 | 46 | 
 
  | 
 | 47 | +	stack_key_map_fd = bpf_find_map(__func__, obj, "stack_key_map");  | 
 | 48 | +	if (CHECK_FAIL(stack_key_map_fd < 0))  | 
 | 49 | +		goto disable_pmu;  | 
 | 50 | + | 
44 | 51 | 	/* give some time for bpf program run */  | 
45 | 52 | 	sleep(1);  | 
46 | 53 | 
 
  | 
@@ -68,6 +75,19 @@ void test_stacktrace_map(void)  | 
68 | 75 | 		  "err %d errno %d\n", err, errno))  | 
69 | 76 | 		goto disable_pmu;  | 
70 | 77 | 
 
  | 
 | 78 | +	err = bpf_map_lookup_elem(stack_key_map_fd, &key, &stack_id);  | 
 | 79 | +	if (CHECK(err, "stack_key_map lookup", "err %d errno %d\n", err, errno))  | 
 | 80 | +		goto disable_pmu;  | 
 | 81 | + | 
 | 82 | +	err = bpf_map_lookup_and_delete_elem(stackmap_fd, &stack_id, &val_buf);  | 
 | 83 | +	if (CHECK(err, "stackmap lookup and delete",  | 
 | 84 | +		  "err %d errno %d\n", err, errno))  | 
 | 85 | +		goto disable_pmu;  | 
 | 86 | + | 
 | 87 | +	err = bpf_map_lookup_elem(stackmap_fd, &stack_id, &val_buf);  | 
 | 88 | +	CHECK((!err || errno != ENOENT), "stackmap lookup deleted stack_id",  | 
 | 89 | +	      "err %d errno %d\n", err, errno);  | 
 | 90 | + | 
71 | 91 | disable_pmu:  | 
72 | 92 | 	bpf_link__destroy(link);  | 
73 | 93 | close_prog:  | 
 | 
0 commit comments