mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 02:44:41 +01:00
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>
This commit is contained in:
parent
e62e48adf7
commit
a38cd1fea9
1 changed files with 8 additions and 1 deletions
|
|
@ -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)*))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue