summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2025-01-08 18:02:55 +0100
committerDennis Kobert <dennis@kobert.dev>2025-01-08 18:02:55 +0100
commit6ff83f0585b5373159b3b909d529dca37847989c (patch)
tree8dbdef6a701558b65b38d3c2022a0aff88c0ec00
parent3577ad9cfcaf75be51433e16f8483606fe1f47e9 (diff)
Fix error detection
-rw-r--r--rust/kernel/perf_event.rs22
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 {}