On Sun Apr 13, 2025 at 7:36 PM CEST, Danilo Krummrich wrote: > 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@xxxxxxxxxx> One nit below, with that fixed: Reviewed-by: Benno Lossin <benno.lossin@xxxxxxxxx> > --- > 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 7cb6f0fc005d..26e71224460b 100644 > --- a/rust/kernel/device.rs > +++ b/rust/kernel/device.rs > @@ -279,6 +279,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> { Missing `::` in front of `core`. > + 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 {