vfio_pci: Allow regions to add own capabilities
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Wed, 19 Dec 2018 08:52:31 +0000 (19:52 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 21 Dec 2018 05:20:47 +0000 (16:20 +1100)
VFIO regions already support region capabilities with a limited set of
fields. However the subdriver might have to report to the userspace
additional bits.

This adds an add_capability() hook to vfio_pci_regops.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Acked-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/vfio/pci/vfio_pci.c
drivers/vfio/pci/vfio_pci_private.h

index 9a86470f4ed9fce236d942dea1c1222731b412f7..0c94204e21f50a75ee8023fcf87fc57eefcc8ba3 100644 (file)
@@ -750,6 +750,12 @@ static long vfio_pci_ioctl(void *device_data,
                        if (ret)
                                return ret;
 
+                       if (vdev->region[i].ops->add_capability) {
+                               ret = vdev->region[i].ops->add_capability(vdev,
+                                               &vdev->region[i], &caps);
+                               if (ret)
+                                       return ret;
+                       }
                }
                }
 
index 86aab05d3d46b848ae4576d5aca5694da8ac1cfe..93c1738dae115703f8e1891283d25a7db0ca7039 100644 (file)
@@ -62,6 +62,9 @@ struct vfio_pci_regops {
        int     (*mmap)(struct vfio_pci_device *vdev,
                        struct vfio_pci_region *region,
                        struct vm_area_struct *vma);
+       int     (*add_capability)(struct vfio_pci_device *vdev,
+                                 struct vfio_pci_region *region,
+                                 struct vfio_info_cap *caps);
 };
 
 struct vfio_pci_region {