On Thu, Feb 13, 2020 at 10:59:34AM -0500, Michael S. Tsirkin wrote:
On Thu, Feb 13, 2020 at 11:51:54AM -0400, Jason Gunthorpe wrote:I mean it is the registration function provided by the subsystem that
The 'class' is supposed to provide all the library functions to removeHmm I'm not familiar with subsystem_register. A grep didn't find it
this duplication. Instead of plugging the HW driver in via some bus
scheme every subsystem has its own 'ops' that the HW driver provides
to the subsystem's class via subsystem_register()
in the kernel either ...
owns the class, for instance tpm_chip_register(),
ib_register_device(), register_netdev(), rtc_register_device() etc
So if you have some vhost (vhost net?) class then you'd have some
vhost_vdpa_init/alloc(); vhost_vdpa_register(), sequence
presumably. (vs trying to do it with a bus matcher)
I recommend to look at rtc and tpm for fairly simple easy to follow
patterns for creating a subsystem in the kernel. A subsystem owns a class,
allows HW drivers to plug in to it, and provides a consistent user
API via a cdev/sysfs/etc.
The driver model class should revolve around the char dev and sysfs
uABI - if you enumerate the devices on the class then they should all
follow the char dev and sysfs interfaces contract of that class.
Those examples show how to do all the refcounting semi-sanely,
introduce sysfs, cdevs, etc.
I thought the latest proposal was to use the existing vhost class and
largely the existing vhost API, so it probably just needs to make sure
the common class-wide stuff is split from the 'driver' stuff of the
existing vhost to netdev.
Jason