On Wed, Feb 01, 2023 at 11:01:48AM -0800, Jakub Kicinski wrote: > On Wed, 1 Feb 2023 10:07:33 +0100 Jiri Pirko wrote: > > >This is due to the recommended/required devlink lock/unlock during > > >driver initialization/removal. > > > > > >I think it is better to keep the lock/unlock inside the specific driver > > >devlink code, and the functions naming reflects a time window when > > >devlink related/dependent processing is being done. > > > > > >I'm not against changing this, maybe adding the lock/unlock suffix would > > >be preferable?: > > > > > >int efx_probe_devlink_and_lock(struct efx_nic *efx); > > >void efx_probe_devlink_unlock(struct efx_nic *efx); > > >void efx_fini_devlink_lock(struct efx_nic *efx); > > >void efx_fini_devlink_and_unlock(struct efx_nic *efx); > > > > Sounds better. Thanks! > > FWIW I'd just take the devl lock in the main driver code. > devlink should be viewed as a layer between bus and driver rather > than as another subsystem the driver registers with. Otherwise reloads > and port creation get awkward. I see it a bit differently. For me devlink is another subsystem, it even is an optional subsystem. At the moment we don't support devlink port for VFs. If needed we'll add that at some point, but likely only for newer NICs. Do you think vDPA and RDMA devices will ever register with devlink? At the moment I don't see devlink port ever applying to our older hardware, like our sfn8000 or X2 cards. I do think devlink info and other commands could apply more generally. There definitely is a need to evolve to another layer between bus and devices, and devlink can be used to administer that. But that does not imply the reverse, that all devices register as devlink devices. For security we would want to limit some operations (such as port creation) to specific devlink instance(s). For example, normally we would not want a tennant VM to flash new firmware that applies to the whole NIC. I hope this makes sense. Martin