@@ -17,6 +17,7 @@ static __u64 read_perf_max_sample_freq(void)
17
17
void test_stacktrace_build_id_nmi (void )
18
18
{
19
19
int control_map_fd , stackid_hmap_fd , stackmap_fd , stack_amap_fd ;
20
+ const char * prog_name = "tracepoint/random/urandom_read" ;
20
21
const char * file = "./test_stacktrace_build_id.o" ;
21
22
int err , pmu_fd , prog_fd ;
22
23
struct perf_event_attr attr = {
@@ -25,7 +26,9 @@ void test_stacktrace_build_id_nmi(void)
25
26
.config = PERF_COUNT_HW_CPU_CYCLES ,
26
27
};
27
28
__u32 key , previous_key , val , duration = 0 ;
29
+ struct bpf_program * prog ;
28
30
struct bpf_object * obj ;
31
+ struct bpf_link * link ;
29
32
char buf [256 ];
30
33
int i , j ;
31
34
struct bpf_stack_build_id id_offs [PERF_MAX_STACK_DEPTH ];
@@ -39,6 +42,10 @@ void test_stacktrace_build_id_nmi(void)
39
42
if (CHECK (err , "prog_load" , "err %d errno %d\n" , err , errno ))
40
43
return ;
41
44
45
+ prog = bpf_object__find_program_by_title (obj , prog_name );
46
+ if (CHECK (!prog , "find_prog" , "prog '%s' not found\n" , prog_name ))
47
+ goto close_prog ;
48
+
42
49
pmu_fd = syscall (__NR_perf_event_open , & attr , -1 /* pid */ ,
43
50
0 /* cpu 0 */ , -1 /* group id */ ,
44
51
0 /* flags */ );
@@ -47,15 +54,12 @@ void test_stacktrace_build_id_nmi(void)
47
54
pmu_fd , errno ))
48
55
goto close_prog ;
49
56
50
- err = ioctl (pmu_fd , PERF_EVENT_IOC_ENABLE , 0 );
51
- if (CHECK (err , "perf_event_ioc_enable" , "err %d errno %d\n" ,
52
- err , errno ))
53
- goto close_pmu ;
54
-
55
- err = ioctl (pmu_fd , PERF_EVENT_IOC_SET_BPF , prog_fd );
56
- if (CHECK (err , "perf_event_ioc_set_bpf" , "err %d errno %d\n" ,
57
- err , errno ))
58
- goto disable_pmu ;
57
+ link = bpf_program__attach_perf_event (prog , pmu_fd );
58
+ if (CHECK (IS_ERR (link ), "attach_perf_event" ,
59
+ "err %ld\n" , PTR_ERR (link ))) {
60
+ close (pmu_fd );
61
+ goto close_prog ;
62
+ }
59
63
60
64
/* find map fds */
61
65
control_map_fd = bpf_find_map (__func__ , obj , "control_map" );
@@ -134,8 +138,7 @@ void test_stacktrace_build_id_nmi(void)
134
138
* try it one more time.
135
139
*/
136
140
if (build_id_matches < 1 && retry -- ) {
137
- ioctl (pmu_fd , PERF_EVENT_IOC_DISABLE );
138
- close (pmu_fd );
141
+ bpf_link__destroy (link );
139
142
bpf_object__close (obj );
140
143
printf ("%s:WARN:Didn't find expected build ID from the map, retrying\n" ,
141
144
__func__ );
@@ -154,11 +157,7 @@ void test_stacktrace_build_id_nmi(void)
154
157
*/
155
158
156
159
disable_pmu :
157
- ioctl (pmu_fd , PERF_EVENT_IOC_DISABLE );
158
-
159
- close_pmu :
160
- close (pmu_fd );
161
-
160
+ bpf_link__destroy (link );
162
161
close_prog :
163
162
bpf_object__close (obj );
164
163
}
0 commit comments