@ -1,5 +1,5 @@
use std ::{
use std ::{
ffi ::{ c_int , c_long, CString, OsStr } ,
ffi ::{ c_int , CString, OsStr } ,
io , mem ,
io , mem ,
os ::fd ::{ BorrowedFd , FromRawFd as _ } ,
os ::fd ::{ BorrowedFd , FromRawFd as _ } ,
} ;
} ;
@ -26,7 +26,7 @@ pub(crate) fn perf_event_open(
wakeup : bool ,
wakeup : bool ,
inherit : bool ,
inherit : bool ,
flags : u32 ,
flags : u32 ,
) -> Sys Result< crate ::MockableFd > {
) -> io:: Result< crate ::MockableFd > {
let mut attr = unsafe { mem ::zeroed ::< perf_event_attr > ( ) } ;
let mut attr = unsafe { mem ::zeroed ::< perf_event_attr > ( ) } ;
attr . config = config ;
attr . config = config ;
@ -46,7 +46,7 @@ pub(crate) fn perf_event_open(
perf_event_sys ( attr , pid , cpu , flags )
perf_event_sys ( attr , pid , cpu , flags )
}
}
pub ( crate ) fn perf_event_open_bpf ( cpu : c_int ) -> Sys Result< crate ::MockableFd > {
pub ( crate ) fn perf_event_open_bpf ( cpu : c_int ) -> io:: Result< crate ::MockableFd > {
perf_event_open (
perf_event_open (
PERF_TYPE_SOFTWARE as u32 ,
PERF_TYPE_SOFTWARE as u32 ,
PERF_COUNT_SW_BPF_OUTPUT as u64 ,
PERF_COUNT_SW_BPF_OUTPUT as u64 ,
@ -66,7 +66,7 @@ pub(crate) fn perf_event_open_probe(
name : & OsStr ,
name : & OsStr ,
offset : u64 ,
offset : u64 ,
pid : Option < pid_t > ,
pid : Option < pid_t > ,
) -> Sys Result< crate ::MockableFd > {
) -> io:: Result< crate ::MockableFd > {
use std ::os ::unix ::ffi ::OsStrExt as _ ;
use std ::os ::unix ::ffi ::OsStrExt as _ ;
let mut attr = unsafe { mem ::zeroed ::< perf_event_attr > ( ) } ;
let mut attr = unsafe { mem ::zeroed ::< perf_event_attr > ( ) } ;
@ -91,7 +91,7 @@ pub(crate) fn perf_event_open_probe(
pub ( crate ) fn perf_event_open_trace_point (
pub ( crate ) fn perf_event_open_trace_point (
id : u32 ,
id : u32 ,
pid : Option < pid_t > ,
pid : Option < pid_t > ,
) -> Sys Result< crate ::MockableFd > {
) -> io:: Result< crate ::MockableFd > {
let mut attr = unsafe { mem ::zeroed ::< perf_event_attr > ( ) } ;
let mut attr = unsafe { mem ::zeroed ::< perf_event_attr > ( ) } ;
attr . size = mem ::size_of ::< perf_event_attr > ( ) as u32 ;
attr . size = mem ::size_of ::< perf_event_attr > ( ) as u32 ;
@ -104,7 +104,7 @@ pub(crate) fn perf_event_open_trace_point(
perf_event_sys ( attr , pid , cpu , PERF_FLAG_FD_CLOEXEC )
perf_event_sys ( attr , pid , cpu , PERF_FLAG_FD_CLOEXEC )
}
}
pub ( crate ) fn perf_event_ioctl ( fd : BorrowedFd < ' _ > , request : u32 , arg : c_int ) -> SysResult < c_long > {
pub ( crate ) fn perf_event_ioctl ( fd : BorrowedFd < ' _ > , request : u32 , arg : c_int ) -> SysResult {
let call = Syscall ::PerfEventIoctl { fd , request , arg } ;
let call = Syscall ::PerfEventIoctl { fd , request , arg } ;
#[ cfg(not(test)) ]
#[ cfg(not(test)) ]
return syscall ( call ) ;
return syscall ( call ) ;
@ -118,22 +118,23 @@ fn perf_event_sys(
pid : pid_t ,
pid : pid_t ,
cpu : i32 ,
cpu : i32 ,
flags : u32 ,
flags : u32 ,
) -> Sys Result< crate ::MockableFd > {
) -> io:: Result< crate ::MockableFd > {
let fd = syscall ( Syscall ::PerfEventOpen {
let fd = syscall ( Syscall ::PerfEventOpen {
attr ,
attr ,
pid ,
pid ,
cpu ,
cpu ,
group : - 1 ,
group : - 1 ,
flags ,
flags ,
} )
. map_err ( | ( code , io_error ) | {
assert_eq! ( code , - 1 ) ;
io_error
} ) ? ;
} ) ? ;
let fd = fd . try_into ( ) . map_err ( | std ::num ::TryFromIntError { .. } | {
let fd = fd . try_into ( ) . map_err ( | std ::num ::TryFromIntError { .. } | {
(
io ::Error ::new (
fd ,
io ::ErrorKind ::InvalidData ,
io ::Error ::new (
format! ( "perf_event_open: invalid fd returned: {fd}" ) ,
io ::ErrorKind ::InvalidData ,
format! ( "perf_event_open: invalid fd returned: {fd}" ) ,
) ,
)
)
} ) ? ;
} ) ? ;