Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 #include <test_progs.h>
0003 
0004 void test_stacktrace_map_raw_tp(void)
0005 {
0006     const char *prog_name = "oncpu";
0007     int control_map_fd, stackid_hmap_fd, stackmap_fd;
0008     const char *file = "./test_stacktrace_map.o";
0009     __u32 key, val, duration = 0;
0010     int err, prog_fd;
0011     struct bpf_program *prog;
0012     struct bpf_object *obj;
0013     struct bpf_link *link = NULL;
0014 
0015     err = bpf_prog_test_load(file, BPF_PROG_TYPE_RAW_TRACEPOINT, &obj, &prog_fd);
0016     if (CHECK(err, "prog_load raw tp", "err %d errno %d\n", err, errno))
0017         return;
0018 
0019     prog = bpf_object__find_program_by_name(obj, prog_name);
0020     if (CHECK(!prog, "find_prog", "prog '%s' not found\n", prog_name))
0021         goto close_prog;
0022 
0023     link = bpf_program__attach_raw_tracepoint(prog, "sched_switch");
0024     if (!ASSERT_OK_PTR(link, "attach_raw_tp"))
0025         goto close_prog;
0026 
0027     /* find map fds */
0028     control_map_fd = bpf_find_map(__func__, obj, "control_map");
0029     if (CHECK_FAIL(control_map_fd < 0))
0030         goto close_prog;
0031 
0032     stackid_hmap_fd = bpf_find_map(__func__, obj, "stackid_hmap");
0033     if (CHECK_FAIL(stackid_hmap_fd < 0))
0034         goto close_prog;
0035 
0036     stackmap_fd = bpf_find_map(__func__, obj, "stackmap");
0037     if (CHECK_FAIL(stackmap_fd < 0))
0038         goto close_prog;
0039 
0040     /* give some time for bpf program run */
0041     sleep(1);
0042 
0043     /* disable stack trace collection */
0044     key = 0;
0045     val = 1;
0046     bpf_map_update_elem(control_map_fd, &key, &val, 0);
0047 
0048     /* for every element in stackid_hmap, we can find a corresponding one
0049      * in stackmap, and vise versa.
0050      */
0051     err = compare_map_keys(stackid_hmap_fd, stackmap_fd);
0052     if (CHECK(err, "compare_map_keys stackid_hmap vs. stackmap",
0053           "err %d errno %d\n", err, errno))
0054         goto close_prog;
0055 
0056     err = compare_map_keys(stackmap_fd, stackid_hmap_fd);
0057     if (CHECK(err, "compare_map_keys stackmap vs. stackid_hmap",
0058           "err %d errno %d\n", err, errno))
0059         goto close_prog;
0060 
0061 close_prog:
0062     bpf_link__destroy(link);
0063     bpf_object__close(obj);
0064 }