diff options
| author | Gary Guo <gary@garyguo.net> | 2026-01-23 17:58:38 +0000 |
|---|---|---|
| committer | Danilo Krummrich <dakr@kernel.org> | 2026-01-24 01:12:49 +0100 |
| commit | a38cd1fea98990e20021823cea251e6cb088eeab (patch) | |
| tree | 714fa55308d8b0ab943c1e56bca9b502670a6ba8 /rust | |
| parent | e62e48adf76cc4432c6d749a940da8649f8cb5a7 (diff) | |
rust: device: support `dev_printk` on all devices
Currently, `dev_*` only works on the core `Device`, but not on any other
bus or class device objects. This causes a pattern of
`dev_info!(pdev.as_ref())` which is not ideal.
This adds support of using these devices directly with `dev_*` macros, by
adding `AsRef` call inside the macro. To make sure we can still use just
`kernel::device::Device`, as `AsRef` implementation is added for it; this
is typical for types that is designed to use with `AsRef` anyway, for
example, `str` implements `AsRef<str>` and `Path` implements `AsRef<Path>`.
Signed-off-by: Gary Guo <gary@garyguo.net>
Link: https://patch.msgid.link/20260123175854.176735-1-gary@kernel.org
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/kernel/device.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs index cb2348934676..a9cbed2e204c 100644 --- a/rust/kernel/device.rs +++ b/rust/kernel/device.rs @@ -599,6 +599,13 @@ impl DeviceContext for Core {} impl DeviceContext for CoreInternal {} impl DeviceContext for Normal {} +impl<Ctx: DeviceContext> AsRef<Device<Ctx>> for Device<Ctx> { + #[inline] + fn as_ref(&self) -> &Device<Ctx> { + self + } +} + /// Convert device references to bus device references. /// /// Bus devices can implement this trait to allow abstractions to provide the bus device in @@ -718,7 +725,7 @@ macro_rules! impl_device_context_into_aref { macro_rules! dev_printk { ($method:ident, $dev:expr, $($f:tt)*) => { { - ($dev).$method($crate::prelude::fmt!($($f)*)); + $crate::device::Device::$method($dev.as_ref(), $crate::prelude::fmt!($($f)*)) } } } |
