On 22.04.24 03:54, Lyude Paul wrote: > On Wed, 2024-03-27 at 21:06 +0000, Benno Lossin wrote: >> On 22.03.24 23:03, Lyude Paul wrote: >>> + >>> +pub(crate) type Connector = connector::Connector<DriverConnector>; >>> + >>> +impl connector::DriverConnector for DriverConnector { >>> + type Initializer = impl PinInit<Self, Error>; >>> + >>> + type State = ConnectorState; >>> + >>> + type Driver = RvkmsDriver; >>> + >>> + type Args = (); >>> + >>> + fn new(dev: &Device<Self::Driver>, args: Self::Args) -> >>> Self::Initializer { >> >> And then here just return `Self`. >> >> This works, since there is a blanket impl `PinInit<T, E> for T`. >> >> Looking at how you use this API, I am not sure if you actually need >> pin-init for the type that implements `DriverConnector`. >> Do you need to store eg `Mutex<T>` or something else that needs >> pin-init in here in a more complex driver? > > Most likely yes - a lot of drivers have various private locks contained > within their subclassed mode objects. I'm not sure we will in rvkms's > connector since vkms doesn't really do much with connectors - but we at > a minimum be using pinned types (spinlocks and hrtimers) in our > DriverCrtc implementation once I've started implementing support for > vblanks[1] > > [1] > https://www.kernel.org/doc/html/v6.9-rc5/gpu/drm-kms.html?highlight=vblank#vertical-blanking > > In nova (the main reason I'm working on rvkms in the first place), > we'll definitely have locks in our connectors and possibly other types. I see, in that case it would be a good idea to either have an RFC of the nova driver (or something else that needs pinned types) as motivation for why it needs to be pin-initialized. -- Cheers, Benno