On Mon, 26 Apr 2021 17:00:02 -0300 Jason Gunthorpe jgg@nvidia.com wrote:
The mdev bus's core part for managing the lifecycle of devices is mostly as one would expect for a driver core bus subsystem.
However instead of having a normal 'struct device_driver' and binding the actual mdev drivers through the standard driver core mechanisms it open codes this with the struct mdev_parent_ops and provides a single driver that shims between the VFIO core and the actual device driver.
Make every one of the mdev drivers implement an actual struct mdev_driver and directly call vfio_register_group_dev() in the probe() function for the mdev.
Squash what is left of the mdev_parent_ops into the mdev_driver and remap create(), remove() and mdev_attr_groups to their driver core equivalents. Arrange to bind the created mdev_device to the mdev_driver that is provided by the end driver.
The actual execution flow doesn't change much, eg what was parent_ops->create is now device_driver->probe and it is called at almost the exact same time - except under the normal control of the driver core.
This allows deleting the entire mdev_drvdata, and tidying some of the sysfs. Many places in the drivers start using container_of()
This cleanly splits the mdev sysfs GUID lifecycle management stuff from the vfio_device implementation part, the only VFIO special part of mdev that remains is the mdev specific iommu intervention.
v2:
- Keep && m in samples kconfig
- Restore accidently squashed removeal of vfio_mdev.c
- Remove indirections to call bus_register()/bus_unregister()
- Reflow long doc lines
v1: https://lore.kernel.org/r/0-v1-d88406ed308e+418-vfio3_jgg@nvidia.com
Jason
Cc: Leon Romanovsky leonro@nvidia.com Cc: "Raj, Ashok" ashok.raj@intel.com Cc: Dan Williams dan.j.williams@intel.com Cc: Max Gurtovoy mgurtovoy@nvidia.com Cc: Christoph Hellwig hch@lst.de Cc: Tarun Gupta targupta@nvidia.com Cc: Daniel Vetter daniel@ffwll.ch
Jason Gunthorpe (13): vfio/mdev: Remove CONFIG_VFIO_MDEV_DEVICE vfio/mdev: Allow the mdev_parent_ops to specify the device driver to bind vfio/mtty: Convert to use vfio_register_group_dev() vfio/mdpy: Convert to use vfio_register_group_dev() vfio/mbochs: Convert to use vfio_register_group_dev() vfio/ap_ops: Convert to use vfio_register_group_dev() vfio/ccw: Convert to use vfio_register_group_dev() vfio/gvt: Convert to use vfio_register_group_dev() vfio/mdev: Remove vfio_mdev.c vfio/mdev: Remove mdev_parent_ops dev_attr_groups vfio/mdev: Remove mdev_parent_ops vfio/mdev: Use the driver core to create the 'remove' file vfio/mdev: Remove mdev drvdata
It'd be really helpful if you could consistently copy at least one list, preferably one monitored by patchwork, for an entire series. The kvm list is missing patches 06 and 08. I can find the latter hopping over to the intel-gfx or dri-devel projects as I did for the last series, but 06 only copied linux-s390, where I need to use lore and can't find a patchwork. Thanks,
Alex
.../driver-api/vfio-mediated-device.rst | 56 ++--- Documentation/s390/vfio-ap.rst | 1 - arch/s390/Kconfig | 2 +- drivers/gpu/drm/i915/Kconfig | 2 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 210 +++++++++-------- drivers/s390/cio/vfio_ccw_drv.c | 21 +- drivers/s390/cio/vfio_ccw_ops.c | 136 ++++++----- drivers/s390/cio/vfio_ccw_private.h | 5 + drivers/s390/crypto/vfio_ap_ops.c | 138 ++++++----- drivers/s390/crypto/vfio_ap_private.h | 2 + drivers/vfio/mdev/Kconfig | 7 - drivers/vfio/mdev/Makefile | 1 - drivers/vfio/mdev/mdev_core.c | 67 ++++-- drivers/vfio/mdev/mdev_driver.c | 20 +- drivers/vfio/mdev/mdev_private.h | 4 +- drivers/vfio/mdev/mdev_sysfs.c | 37 ++- drivers/vfio/mdev/vfio_mdev.c | 180 --------------- drivers/vfio/vfio.c | 6 +- include/linux/mdev.h | 86 +------ include/linux/vfio.h | 4 + samples/Kconfig | 6 +- samples/vfio-mdev/mbochs.c | 166 +++++++------ samples/vfio-mdev/mdpy.c | 162 +++++++------ samples/vfio-mdev/mtty.c | 218 +++++++----------- 24 files changed, 651 insertions(+), 886 deletions(-) delete mode 100644 drivers/vfio/mdev/vfio_mdev.c