[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250331202805.338468-3-dakr@kernel.org>
Date: Mon, 31 Mar 2025 22:27:55 +0200
From: Danilo Krummrich <dakr@...nel.org>
To: bhelgaas@...gle.com,
gregkh@...uxfoundation.org,
rafael@...nel.org,
abdiel.janulgue@...il.com
Cc: ojeda@...nel.org,
alex.gaynor@...il.com,
boqun.feng@...il.com,
gary@...yguo.net,
bjorn3_gh@...tonmail.com,
benno.lossin@...ton.me,
a.hindborg@...nel.org,
aliceryhl@...gle.com,
tmgross@...ch.edu,
daniel.almeida@...labora.com,
robin.murphy@....com,
linux-pci@...r.kernel.org,
rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org,
Danilo Krummrich <dakr@...nel.org>
Subject: [PATCH 2/9] rust: device: implement impl_device_context_into_aref!
Implement a macro to implement all From conversions of a certain device
to ARef<Device>.
This avoids unnecessary boiler plate code for every device
implementation.
Signed-off-by: Danilo Krummrich <dakr@...nel.org>
---
rust/kernel/device.rs | 21 +++++++++++++++++++++
rust/kernel/pci.rs | 7 +------
rust/kernel/platform.rs | 9 ++-------
3 files changed, 24 insertions(+), 13 deletions(-)
diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs
index e3ab8980270e..68652ba62b02 100644
--- a/rust/kernel/device.rs
+++ b/rust/kernel/device.rs
@@ -264,6 +264,27 @@ macro_rules! impl_device_context_deref {
};
}
+#[doc(hidden)]
+#[macro_export]
+macro_rules! __impl_device_context_into_aref {
+ ($src:ty, $device:tt) => {
+ impl core::convert::From<&$device<$src>> for $crate::types::ARef<$device> {
+ fn from(dev: &$device<$src>) -> Self {
+ (&**dev).into()
+ }
+ }
+ };
+}
+
+/// Implement [`core::convert::From`], such that all `&Device<Ctx>` can be converted to an
+/// `ARef<Device>`.
+#[macro_export]
+macro_rules! impl_device_context_into_aref {
+ ($device:tt) => {
+ kernel::__impl_device_context_into_aref!($crate::device::Core, $device);
+ };
+}
+
#[doc(hidden)]
#[macro_export]
macro_rules! dev_printk {
diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs
index 0e735409bfc4..e235aa23c63a 100644
--- a/rust/kernel/pci.rs
+++ b/rust/kernel/pci.rs
@@ -423,12 +423,7 @@ pub fn set_master(&self) {
}
kernel::impl_device_context_deref!(Device);
-
-impl From<&Device<device::Core>> for ARef<Device> {
- fn from(dev: &Device<device::Core>) -> Self {
- (&**dev).into()
- }
-}
+kernel::impl_device_context_into_aref!(Device);
// SAFETY: Instances of `Device` are always reference-counted.
unsafe impl crate::types::AlwaysRefCounted for Device {
diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs
index 9268e1edca9b..9133490ea4c9 100644
--- a/rust/kernel/platform.rs
+++ b/rust/kernel/platform.rs
@@ -10,7 +10,7 @@
of,
prelude::*,
str::CStr,
- types::{ARef, ForeignOwnable, Opaque},
+ types::{ForeignOwnable, Opaque},
ThisModule,
};
@@ -190,12 +190,7 @@ fn as_raw(&self) -> *mut bindings::platform_device {
}
kernel::impl_device_context_deref!(Device);
-
-impl From<&Device<device::Core>> for ARef<Device> {
- fn from(dev: &Device<device::Core>) -> Self {
- (&**dev).into()
- }
-}
+kernel::impl_device_context_into_aref!(Device);
// SAFETY: Instances of `Device` are always reference-counted.
unsafe impl crate::types::AlwaysRefCounted for Device {
--
2.49.0
Powered by blists - more mailing lists