@@ -46,28 +46,25 @@ struct stacktrace_event {
46
46
fn init_perf_monitor ( freq : u64 , sw_event : bool ) -> Result < Vec < i32 > , libbpf_rs:: Error > {
47
47
let nprocs = libbpf_rs:: num_possible_cpus ( ) . unwrap ( ) ;
48
48
let pid = -1 ;
49
- let buf: Vec < u8 > = vec ! [ 0 ; mem:: size_of:: <syscall:: perf_event_attr>( ) ] ;
50
- let mut attr = unsafe {
51
- Box :: < syscall:: perf_event_attr > :: from_raw (
52
- buf. leak ( ) . as_mut_ptr ( ) as * mut syscall:: perf_event_attr
53
- )
54
- } ;
55
- attr. _type = if sw_event {
56
- syscall:: PERF_TYPE_SOFTWARE
57
- } else {
58
- syscall:: PERF_TYPE_HARDWARE
49
+ let attr = syscall:: perf_event_attr {
50
+ _type : if sw_event {
51
+ syscall:: PERF_TYPE_SOFTWARE
52
+ } else {
53
+ syscall:: PERF_TYPE_HARDWARE
54
+ } ,
55
+ size : mem:: size_of :: < syscall:: perf_event_attr > ( ) as u32 ,
56
+ config : if sw_event {
57
+ syscall:: PERF_COUNT_SW_CPU_CLOCK
58
+ } else {
59
+ syscall:: PERF_COUNT_HW_CPU_CYCLES
60
+ } ,
61
+ sample : syscall:: sample_un { sample_freq : freq } ,
62
+ flags : 1 << 10 , // freq = 1
63
+ ..Default :: default ( )
59
64
} ;
60
- attr. size = mem:: size_of :: < syscall:: perf_event_attr > ( ) as u32 ;
61
- attr. config = if sw_event {
62
- syscall:: PERF_COUNT_SW_CPU_CLOCK
63
- } else {
64
- syscall:: PERF_COUNT_HW_CPU_CYCLES
65
- } ;
66
- attr. sample . sample_freq = freq;
67
- attr. flags = 1 << 10 ; // freq = 1
68
65
( 0 ..nprocs)
69
66
. map ( |cpu| {
70
- let fd = syscall:: perf_event_open ( attr. as_ref ( ) , pid, cpu as i32 , -1 , 0 ) as i32 ;
67
+ let fd = syscall:: perf_event_open ( & attr, pid, cpu as i32 , -1 , 0 ) as i32 ;
71
68
if fd == -1 {
72
69
let mut error_context = "Failed to open perf event." ;
73
70
let os_error = io:: Error :: last_os_error ( ) ;
@@ -275,7 +272,9 @@ fn main() -> Result<(), libbpf_rs::Error> {
275
272
276
273
let mut builder = libbpf_rs:: RingBufferBuilder :: new ( ) ;
277
274
builder
278
- . add ( & skel. maps . events , move |data| event_handler ( & symbolizer, data) )
275
+ . add ( & skel. maps . events , move |data| {
276
+ event_handler ( & symbolizer, data)
277
+ } )
279
278
. unwrap ( ) ;
280
279
let ringbuf = builder. build ( ) . unwrap ( ) ;
281
280
while ringbuf. poll ( Duration :: MAX ) . is_ok ( ) { }
0 commit comments