diff --git a/aya/src/maps/perf/perf_buffer.rs b/aya/src/maps/perf/perf_buffer.rs index df0e4974..464262e3 100644 --- a/aya/src/maps/perf/perf_buffer.rs +++ b/aya/src/maps/perf/perf_buffer.rs @@ -6,7 +6,7 @@ use std::{ }; use aya_obj::generated::{ - perf_event_header, perf_event_mmap_page, + PERF_FLAG_FD_CLOEXEC, perf_event_header, perf_event_mmap_page, perf_event_type::{PERF_RECORD_LOST, PERF_RECORD_SAMPLE}, }; use bytes::BytesMut; @@ -14,7 +14,10 @@ use libc::{MAP_SHARED, PROT_READ, PROT_WRITE}; use thiserror::Error; use crate::{ - sys::{PerfEventIoctlRequest, SyscallError, perf_event_ioctl, perf_event_open_bpf}, + programs::perf_event::{ + PerfEventConfig, PerfEventScope, SamplePolicy, SoftwareEvent, WakeupPolicy, + }, + sys::{PerfEventIoctlRequest, SyscallError, perf_event_ioctl, perf_event_open}, util::MMap, }; @@ -92,7 +95,7 @@ pub(crate) struct PerfBuffer { impl PerfBuffer { pub(crate) fn open( - cpu_id: u32, + cpu: u32, page_size: usize, page_count: usize, ) -> Result { @@ -100,8 +103,15 @@ impl PerfBuffer { return Err(PerfBufferError::InvalidPageCount { page_count }); } - let fd = perf_event_open_bpf(cpu_id as i32) - .map_err(|io_error| PerfBufferError::OpenError { io_error })?; + let fd = perf_event_open( + PerfEventConfig::Software(SoftwareEvent::BpfOutput), + PerfEventScope::AllProcessesOneCpu { cpu }, + SamplePolicy::Period(1), + WakeupPolicy::Events(1), + false, + PERF_FLAG_FD_CLOEXEC, + ) + .map_err(|io_error| PerfBufferError::OpenError { io_error })?; let size = page_size * page_count; let mmap = MMap::new( fd.as_fd(), diff --git a/aya/src/sys/perf_event.rs b/aya/src/sys/perf_event.rs index b9de4c71..50fcabcb 100644 --- a/aya/src/sys/perf_event.rs +++ b/aya/src/sys/perf_event.rs @@ -1,5 +1,5 @@ use std::{ - ffi::{CString, OsStr, c_int, c_long, c_uint}, + ffi::{CString, OsStr, c_long, c_uint}, io, mem, os::fd::{BorrowedFd, FromRawFd as _}, }; @@ -17,7 +17,7 @@ use libc::pid_t; use super::{PerfEventIoctlRequest, Syscall, syscall}; use crate::programs::perf_event::{ - BreakpointConfig, PerfEventConfig, PerfEventScope, SamplePolicy, SoftwareEvent, WakeupPolicy, + BreakpointConfig, PerfEventConfig, PerfEventScope, SamplePolicy, WakeupPolicy, perf_type_id_to_u32, }; @@ -128,18 +128,6 @@ pub(crate) fn perf_event_open( perf_event_sys(attr, pid, cpu, flags) } -pub(crate) fn perf_event_open_bpf(cpu: c_int) -> io::Result { - let cpu = cpu as u32; - perf_event_open( - PerfEventConfig::Software(SoftwareEvent::BpfOutput), - PerfEventScope::AllProcessesOneCpu { cpu }, - SamplePolicy::Period(1), - WakeupPolicy::Events(1), - false, - PERF_FLAG_FD_CLOEXEC, - ) -} - pub(crate) fn perf_event_open_probe( ty: u32, ret_bit: Option,