There is alot of duplicated code in the drivers for processing VFIO_DEVICE_GET_REGION_INFO. Introduce a new op get_region_info_caps() which provides a struct vfio_info_cap and handles the cap chain logic to write the caps back to userspace and remove all of this duplication from drivers.
This is done in two steps, the first is a largely mechanical introduction of the get_region_info(). These patches are best viewed with the diff option to ignore whitespace (-b) as most of the lines are re-indending things. Then drivers are updated to remove the duplicate cap related code. Some drivers are converted to use vfio_info_add_capability() instead of open coding a version of it. This is on github: https://github.com/jgunthorpe/linux/commits/vfio_get_region_info_op Jason Gunthorpe (22): vfio: Provide a get_region_info op vfio/hisi: Convert to the get_region_info op vfio/virtio: Convert to the get_region_info op vfio/nvgrace: Convert to the get_region_info op vfio/pci: Fill in the missing get_region_info ops vfio/mtty: Provide a get_region_info op vfio/mdpy: Provide a get_region_info op vfio/mbochs: Provide a get_region_info op vfio/platform: Provide a get_region_info op vfio/fsl: Provide a get_region_info op vfio/cdx: Provide a get_region_info op vfio/ccw: Provide a get_region_info op vfio/gvt: Provide a get_region_info op vfio: Require drivers to implement get_region_info vfio: Add get_region_info_caps op vfio/mbochs: Convert mbochs to use vfio_info_add_capability() vfio/gvt: Convert to get_region_info_caps vfio/ccw: Convert to get_region_info_caps vfio/pci: Convert all PCI drivers to get_region_info_caps vfio/platform: Convert to get_region_info_caps vfio: Move the remaining drivers to get_region_info_caps vfio: Remove the get_region_info op drivers/gpu/drm/i915/gvt/kvmgt.c | 272 ++++++++---------- drivers/s390/cio/vfio_ccw_ops.c | 45 +-- drivers/vfio/cdx/main.c | 29 +- drivers/vfio/fsl-mc/vfio_fsl_mc.c | 43 ++- .../vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 54 ++-- drivers/vfio/pci/mlx5/main.c | 1 + drivers/vfio/pci/nvgrace-gpu/main.c | 53 +--- drivers/vfio/pci/pds/vfio_dev.c | 1 + drivers/vfio/pci/qat/main.c | 1 + drivers/vfio/pci/vfio_pci.c | 1 + drivers/vfio/pci/vfio_pci_core.c | 110 +++---- drivers/vfio/pci/virtio/common.h | 5 +- drivers/vfio/pci/virtio/legacy_io.c | 38 +-- drivers/vfio/pci/virtio/main.c | 5 +- drivers/vfio/platform/vfio_amba.c | 1 + drivers/vfio/platform/vfio_platform.c | 1 + drivers/vfio/platform/vfio_platform_common.c | 40 ++- drivers/vfio/platform/vfio_platform_private.h | 3 + drivers/vfio/vfio_main.c | 45 +++ include/linux/vfio.h | 4 + include/linux/vfio_pci_core.h | 3 + samples/vfio-mdev/mbochs.c | 71 ++--- samples/vfio-mdev/mdpy.c | 34 +-- samples/vfio-mdev/mtty.c | 33 +-- 24 files changed, 363 insertions(+), 530 deletions(-) base-commit: 211ddde0823f1442e4ad052a2f30f050145ccada -- 2.43.0
