feature->flags = VFIO_DEVICE_FEATURE_GET |
VFIO_DEVICE_FEATURE_DMA_LOGGING_REPORT;
- return vbasedev->io_ops->device_feature(vbasedev, feature);
+ return vfio_device_get_feature(vbasedev, feature);
}
static int vfio_container_iommu_query_dirty_bitmap(
return false;
}
+int vfio_device_get_feature(VFIODevice *vbasedev,
+ struct vfio_device_feature *feature)
+{
+ if (!vbasedev->io_ops || !vbasedev->io_ops->device_feature) {
+ return -EINVAL;
+ }
+ return vbasedev->io_ops->device_feature(vbasedev, feature);
+}
+
/*
* Traditional ioctl() based io
*/
continue;
}
- ret = vbasedev->io_ops->device_feature(vbasedev, feature);
+ ret = vfio_device_get_feature(vbasedev, feature);
if (ret != 0) {
warn_report("%s: Failed to stop DMA logging, err %d (%s)",
continue;
}
- ret = vbasedev->io_ops->device_feature(vbasedev, feature);
+ ret = vfio_device_get_feature(vbasedev, feature);
if (ret) {
error_setg_errno(errp, -ret, "%s: Failed to start DMA logging",
vbasedev->name);
uint32_t type, void *caps,
uint32_t size);
+int vfio_device_get_feature(VFIODevice *vbasedev,
+ struct vfio_device_feature *feature);
+
int vfio_device_get_region_info(VFIODevice *vbasedev, int index,
struct vfio_region_info **info);
int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type,