22#include <test_progs.h>
33#include "stacktrace_map.skel.h"
44
5- static void test_stacktrace_map_tp ( bool raw_tp )
5+ static void check_stackmap ( struct stacktrace_map * skel )
66{
7- struct stacktrace_map * skel ;
87 int control_map_fd , stackid_hmap_fd , stackmap_fd , stack_amap_fd ;
98 int err , stack_trace_len ;
109 __u32 key , val , stack_id , duration = 0 ;
1110 __u64 stack [PERF_MAX_STACK_DEPTH ];
1211
13- skel = stacktrace_map__open_and_load ();
14- if (!ASSERT_OK_PTR (skel , "skel_open_and_load" ))
15- return ;
16-
1712 control_map_fd = bpf_map__fd (skel -> maps .control_map );
1813 stackid_hmap_fd = bpf_map__fd (skel -> maps .stackid_hmap );
1914 stackmap_fd = bpf_map__fd (skel -> maps .stackmap );
2015 stack_amap_fd = bpf_map__fd (skel -> maps .stack_amap );
2116
22- if (raw_tp ) {
23- skel -> links .tp = bpf_program__attach_raw_tracepoint (skel -> progs .raw_tp , "sched_switch" );
24- } else {
25- skel -> links .tp = bpf_program__attach_tracepoint (skel -> progs .tp , "sched" , "sched_switch" );
26- }
27-
28- if (!ASSERT_OK_PTR (skel -> links .tp , "attach" ))
29- goto out ;
30- /* give some time for bpf program run */
31- sleep (1 );
32-
3317 /* disable stack trace collection */
3418 key = 0 ;
3519 val = 1 ;
@@ -41,27 +25,50 @@ static void test_stacktrace_map_tp(bool raw_tp)
4125 err = compare_map_keys (stackid_hmap_fd , stackmap_fd );
4226 if (CHECK (err , "compare_map_keys stackid_hmap vs. stackmap" ,
4327 "err %d errno %d\n" , err , errno ))
44- goto out ;
28+ return ;
4529
4630 err = compare_map_keys (stackmap_fd , stackid_hmap_fd );
4731 if (CHECK (err , "compare_map_keys stackmap vs. stackid_hmap" ,
4832 "err %d errno %d\n" , err , errno ))
49- goto out ;
33+ return ;
5034
5135 stack_trace_len = PERF_MAX_STACK_DEPTH * sizeof (__u64 );
5236 err = compare_stack_ips (stackmap_fd , stack_amap_fd , stack_trace_len );
5337 if (CHECK (err , "compare_stack_ips stackmap vs. stack_amap" ,
5438 "err %d errno %d\n" , err , errno ))
55- goto out ;
39+ return ;
5640
5741 stack_id = skel -> bss -> stack_id ;
5842 err = bpf_map_lookup_and_delete_elem (stackmap_fd , & stack_id , stack );
5943 if (!ASSERT_OK (err , "lookup and delete target stack_id" ))
60- goto out ;
44+ return ;
6145
6246 err = bpf_map_lookup_elem (stackmap_fd , & stack_id , stack );
63- if (!ASSERT_EQ (err , - ENOENT , "lookup deleted stack_id" ))
47+ ASSERT_EQ (err , - ENOENT , "lookup deleted stack_id" );
48+ }
49+
50+ static void test_stacktrace_map_tp (bool raw_tp )
51+ {
52+ struct stacktrace_map * skel ;
53+
54+ skel = stacktrace_map__open_and_load ();
55+ if (!ASSERT_OK_PTR (skel , "skel_open_and_load" ))
56+ return ;
57+
58+ if (raw_tp ) {
59+ skel -> links .tp = bpf_program__attach_raw_tracepoint (skel -> progs .raw_tp , "sched_switch" );
60+ } else {
61+ skel -> links .tp = bpf_program__attach_tracepoint (skel -> progs .tp , "sched" , "sched_switch" );
62+ }
63+
64+ if (!ASSERT_OK_PTR (skel -> links .tp , "attach" ))
6465 goto out ;
66+
67+ /* give some time for bpf program run */
68+ sleep (1 );
69+
70+ check_stackmap (skel );
71+
6572out :
6673 stacktrace_map__destroy (skel );
6774}
0 commit comments