virUSBDevicePtr usb = NULL;
virSCSIDevicePtr scsi = NULL;
virSCSIVHostDevicePtr host = NULL;
- virMediatedDevicePtr mdev = NULL;
char *tmpPath = NULL;
bool freeTmpPath = false;
bool includeVFIO = false;
}
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
- if (!(mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
- mdevsrc->model)))
- goto cleanup;
-
- if (!(tmpPath = virMediatedDeviceGetIOMMUGroupDev(mdev)))
+ if (!(tmpPath = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
goto cleanup;
freeTmpPath = true;
virUSBDeviceFree(usb);
virSCSIDeviceFree(scsi);
virSCSIVHostDeviceFree(host);
- virMediatedDeviceFree(mdev);
if (freeTmpPath)
VIR_FREE(tmpPath);
return ret;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: {
char *vfiodev = NULL;
- virMediatedDevicePtr mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
- mdevsrc->model);
- if (!mdev)
+ if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
goto done;
- if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdev))) {
- virMediatedDeviceFree(mdev);
- goto done;
- }
-
ret = AppArmorSetSecurityHostdevLabelHelper(vfiodev, ptr);
VIR_FREE(vfiodev);
- virMediatedDeviceFree(mdev);
break;
}
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: {
char *vfiodev = NULL;
- virMediatedDevicePtr mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
- mdevsrc->model);
- if (!mdev)
+ if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
goto done;
- if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdev))) {
- virMediatedDeviceFree(mdev);
- goto done;
- }
-
ret = virSecurityDACSetHostdevLabelHelper(vfiodev, &cbdata);
VIR_FREE(vfiodev);
- virMediatedDeviceFree(mdev);
break;
}
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: {
char *vfiodev = NULL;
- virMediatedDevicePtr mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
- mdevsrc->model);
- if (!mdev)
+ if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
goto done;
- if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdev))) {
- virMediatedDeviceFree(mdev);
- goto done;
- }
-
ret = virSecurityDACRestoreFileLabel(virSecurityManagerGetPrivateData(mgr),
vfiodev);
VIR_FREE(vfiodev);
- virMediatedDeviceFree(mdev);
break;
}
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: {
char *vfiodev = NULL;
- virMediatedDevicePtr mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
- mdevsrc->model);
- if (!mdev)
+ if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
goto done;
- if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdev))) {
- virMediatedDeviceFree(mdev);
- goto done;
- }
-
ret = virSecuritySELinuxSetHostdevLabelHelper(vfiodev, &data);
VIR_FREE(vfiodev);
- virMediatedDeviceFree(mdev);
break;
}
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: {
char *vfiodev = NULL;
- virMediatedDevicePtr mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
- mdevsrc->model);
- if (!mdev)
+ if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
goto done;
- if (!(vfiodev = virMediatedDeviceGetIOMMUGroupDev(mdev))) {
- virMediatedDeviceFree(mdev);
- goto done;
- }
-
ret = virSecuritySELinuxRestoreFileLabel(mgr, vfiodev);
VIR_FREE(vfiodev);
- virMediatedDeviceFree(mdev);
break;
}
* for freeing the result.
*/
char *
-virMediatedDeviceGetIOMMUGroupDev(virMediatedDevicePtr dev)
+virMediatedDeviceGetIOMMUGroupDev(const char *uuidstr)
{
- char *resultpath = NULL;
+ char *result_path = NULL;
char *iommu_path = NULL;
char *vfio_path = NULL;
+ char *dev_path = virMediatedDeviceGetSysfsPath(uuidstr);
- if (virAsprintf(&iommu_path, "%s/iommu_group", dev->path) < 0)
+ if (!dev_path)
return NULL;
+ if (virAsprintf(&iommu_path, "%s/iommu_group", dev_path) < 0)
+ goto cleanup;
+
if (!virFileExists(iommu_path)) {
virReportSystemError(errno, _("failed to access '%s'"), iommu_path);
goto cleanup;
}
- if (virFileResolveLink(iommu_path, &resultpath) < 0) {
+ if (virFileResolveLink(iommu_path, &result_path) < 0) {
virReportSystemError(errno, _("failed to resolve '%s'"), iommu_path);
goto cleanup;
}
- if (virAsprintf(&vfio_path, "/dev/vfio/%s", last_component(resultpath)) < 0)
+ if (virAsprintf(&vfio_path, "/dev/vfio/%s", last_component(result_path)) < 0)
goto cleanup;
cleanup:
- VIR_FREE(resultpath);
+ VIR_FREE(result_path);
VIR_FREE(iommu_path);
+ VIR_FREE(dev_path);
return vfio_path;
}
int
-virMediatedDeviceGetIOMMUGroupNum(virMediatedDevicePtr dev)
+virMediatedDeviceGetIOMMUGroupNum(const char *uuidstr)
{
char *vfio_path = NULL;
char *group_num_str = NULL;
unsigned int group_num = -1;
- if (!(vfio_path = virMediatedDeviceGetIOMMUGroupDev(dev)))
+ if (!(vfio_path = virMediatedDeviceGetIOMMUGroupDev(uuidstr)))
return -1;
group_num_str = last_component(vfio_path);
const char *domname);
char *
-virMediatedDeviceGetIOMMUGroupDev(virMediatedDevicePtr dev);
+virMediatedDeviceGetIOMMUGroupDev(const char *uuidstr);
int
-virMediatedDeviceGetIOMMUGroupNum(virMediatedDevicePtr dev);
+virMediatedDeviceGetIOMMUGroupNum(const char *uuidstr);
char *
virMediatedDeviceGetSysfsPath(const char *uuidstr);