[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250320222823.16509-3-dakr@kernel.org>
Date: Thu, 20 Mar 2025 23:27:44 +0100
From: Danilo Krummrich <dakr@...nel.org>
To: bhelgaas@...gle.com,
gregkh@...uxfoundation.org,
rafael@...nel.org,
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
Cc: linux-pci@...r.kernel.org,
rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org,
Danilo Krummrich <dakr@...nel.org>
Subject: [PATCH v2 2/4] rust: device: implement bus_type_raw()
Implement bus_type_raw(), which returns a raw pointer to the device'
struct bus_type.
This is useful for bus devices, to implement the following trait.
impl TryFrom<&Device> for &pci::Device
With this a caller can try to get the bus specific device from a generic
device in a safe way. try_from() will only succeed if the generic
device' bus type pointer matches the pointer of the bus' type.
Reviewed-by: Alice Ryhl <aliceryhl@...gle.com>
Signed-off-by: Danilo Krummrich <dakr@...nel.org>
---
rust/kernel/device.rs | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs
index f6bdc2646028..1b554fdd93e9 100644
--- a/rust/kernel/device.rs
+++ b/rust/kernel/device.rs
@@ -80,6 +80,16 @@ pub fn parent<'a>(&self) -> Option<&'a Self> {
}
}
+ /// Returns a raw pointer to the device' bus type.
+ #[expect(unused)]
+ pub(crate) fn bus_type_raw(&self) -> *const bindings::bus_type {
+ // SAFETY:
+ // - By the type invariants, `self.as_raw()` is a valid pointer to a `struct device`.
+ // - `dev->bus` is a pointer to a `const struct bus_type`, which is only ever set at device
+ // creation.
+ unsafe { (*self.as_raw()).bus }
+ }
+
/// Convert a raw C `struct device` pointer to a `&'a Device`.
///
/// # Safety
--
2.48.1
Powered by blists - more mailing lists