diff options
author | Dennis Kobert <dennis@kobert.dev> | 2025-01-08 18:02:55 +0100 |
---|---|---|
committer | Dennis Kobert <dennis@kobert.dev> | 2025-01-08 18:02:55 +0100 |
commit | 6ff83f0585b5373159b3b909d529dca37847989c (patch) | |
tree | 8dbdef6a701558b65b38d3c2022a0aff88c0ec00 | |
parent | 3577ad9cfcaf75be51433e16f8483606fe1f47e9 (diff) |
Fix error detection
-rw-r--r-- | rust/kernel/perf_event.rs | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/rust/kernel/perf_event.rs b/rust/kernel/perf_event.rs index 0326b5868afe..f3bf9a6edb96 100644 --- a/rust/kernel/perf_event.rs +++ b/rust/kernel/perf_event.rs @@ -5,6 +5,9 @@ //! //! C header: [`include/linux/perf_event.h`](srctree/include/linux/perf_event.h) +use bindings::MAX_ERRNO; + +use crate::error::from_err_ptr; use crate::prelude::*; use crate::{bindings, task::Task, types::Opaque}; @@ -425,18 +428,15 @@ pub fn perf_event_create_kernel_counter( return Err(Error::InvalidConfig); } - let signed = isize::from_ne_bytes((raw_perf_event as usize).to_ne_bytes()); - if signed < 0 { - pr_err!("Encountered error during creation of perf event"); - let error = kernel::error::Error::from_errno(signed as i32); - pr_err!("Error: {error:?}"); - return Err(Error::InvalidConfig); + let result = from_err_ptr(raw_perf_event); + match result { + Err(e) => { + pr_err!("Encountered error during creation of perf event"); + pr_err!("Error: {e:?}"); + Err(Error::InvalidConfig) + } + Ok(raw_event) => Ok(PerfEvent { inner: raw_event }), } - pr_err!("event_ptr:{:?}", raw_perf_event); - - Ok(PerfEvent { - inner: raw_perf_event, - }) } unsafe impl Send for PerfEvent {} |