vfio: Simplify capability helper
The vfio_info_add_capability() helper requires the caller to pass a capability ID, which it then uses to fill in header fields, assuming hard coded versions. This makes for an awkward and rigid interface. The only thing we want this helper to do is allocate sufficient space in the caps buffer and chain this capability into the list. Reduce it to that simple task. Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> Acked-by: Zhenyu Wang <zhenyuw@linux.intel.com> Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
@@ -1012,6 +1012,8 @@ static long intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
|
||||
if (!sparse)
|
||||
return -ENOMEM;
|
||||
|
||||
sparse->header.id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
|
||||
sparse->header.version = 1;
|
||||
sparse->nr_areas = nr_areas;
|
||||
cap_type_id = VFIO_REGION_INFO_CAP_SPARSE_MMAP;
|
||||
sparse->areas[0].offset =
|
||||
@@ -1033,7 +1035,9 @@ static long intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
|
||||
break;
|
||||
default:
|
||||
{
|
||||
struct vfio_region_info_cap_type cap_type;
|
||||
struct vfio_region_info_cap_type cap_type = {
|
||||
.header.id = VFIO_REGION_INFO_CAP_TYPE,
|
||||
.header.version = 1 };
|
||||
|
||||
if (info.index >= VFIO_PCI_NUM_REGIONS +
|
||||
vgpu->vdev.num_regions)
|
||||
@@ -1050,8 +1054,8 @@ static long intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
|
||||
cap_type.subtype = vgpu->vdev.region[i].subtype;
|
||||
|
||||
ret = vfio_info_add_capability(&caps,
|
||||
VFIO_REGION_INFO_CAP_TYPE,
|
||||
&cap_type);
|
||||
&cap_type.header,
|
||||
sizeof(cap_type));
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
@@ -1061,8 +1065,9 @@ static long intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
|
||||
switch (cap_type_id) {
|
||||
case VFIO_REGION_INFO_CAP_SPARSE_MMAP:
|
||||
ret = vfio_info_add_capability(&caps,
|
||||
VFIO_REGION_INFO_CAP_SPARSE_MMAP,
|
||||
sparse);
|
||||
&sparse->header, sizeof(*sparse) +
|
||||
(sparse->nr_areas *
|
||||
sizeof(*sparse->areas)));
|
||||
kfree(sparse);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user