On Mon Apr 14, 2025 at 12:56 PM CEST, Danilo Krummrich wrote: > On Mon, Apr 14, 2025 at 10:49:49AM +0000, Benno Lossin wrote: >> On Sun Apr 13, 2025 at 7:37 PM CEST, Danilo Krummrich wrote: >> > The Bound device context indicates that a device is bound to a driver. >> > It must be used for APIs that require the device to be bound, such as >> > Devres or dma::CoherentAllocation. >> > >> > Implement Bound and add the corresponding Deref hierarchy, as well as the >> > corresponding ARef conversion for this device context. >> > >> > Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx> >> > --- >> > rust/kernel/device.rs | 16 +++++++++++++++- >> > 1 file changed, 15 insertions(+), 1 deletion(-) >> > >> > diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs >> > index 487211842f77..585a3fcfeea3 100644 >> > --- a/rust/kernel/device.rs >> > +++ b/rust/kernel/device.rs >> > @@ -232,13 +232,19 @@ pub trait DeviceContext: private::Sealed {} >> > /// any of the bus callbacks, such as `probe()`. >> > pub struct Core; >> > >> > +/// The [`Bound`] context is the context of a bus specific device reference when it is guranteed to >> > +/// be bound for the duration of its lifetime. >> > +pub struct Bound; >> >> One question about this: is it possible for me to >> 1. have access to a `ARef<Device<Bound>>` (or `Core`) via some callback, >> 2. store a clone of the `ARef` in some datastructure, >> 3. wait for the device to become unbound, >> 4. use a `Bound`-only context function and blow something up? > > You can never get an ARef<Device> that has a different device context than > Normal. > > A device must only ever implement AlwaysRefCounted for Device (i.e. > Device<Normal>). Ah yes, I thought there was something there, that's perfect. Might also be a good idea to write this down before it becomes tribal knowledge :) --- Cheers, Benno