[PATCH v2 00/13] Remove vfio_mdev.c, mdev_parent_ops and more

Jason Gunthorpe
2021-04-26T20:00:23Z

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

.../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

--
2.31.1