VIR_WARN("Unable to release USB address on %s",
NULLSTR(devstr));
}
+
+
+int
+qemuDomainEnsureVirtioAddress(bool *releaseAddr,
+ virDomainObjPtr vm,
+ virDomainDeviceDefPtr dev,
+ const char *devicename)
+{
+ virDomainDeviceInfoPtr info = virDomainDeviceGetInfo(dev);
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+ virDomainCCWAddressSetPtr ccwaddrs = NULL;
+ virQEMUDriverPtr driver = priv->driver;
+ int ret = -1;
+
+ if (!info->type) {
+ if (qemuDomainIsS390CCW(vm->def) &&
+ virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW))
+ info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
+ else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390))
+ info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390;
+ } else {
+ if (!qemuDomainCheckCCWS390AddressSupport(vm->def, *info, priv->qemuCaps,
+ devicename))
+ return -1;
+ }
+
+ if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
+ if (!(ccwaddrs = qemuDomainCCWAddrSetCreateFromDomain(vm->def)))
+ goto cleanup;
+ if (virDomainCCWAddressAssign(info, ccwaddrs,
+ !info->addr.ccw.assigned) < 0)
+ goto cleanup;
+ } else if (!info->type ||
+ info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
+ if (qemuDomainEnsurePCIAddress(vm, dev, driver) < 0)
+ goto cleanup;
+ *releaseAddr = true;
+ }
+
+ ret = 0;
+
+ cleanup:
+ virDomainCCWAddressSetFree(ccwaddrs);
+ return ret;
+}
bool driveAdded = false;
bool secobjAdded = false;
bool encobjAdded = false;
- virDomainCCWAddressSetPtr ccwaddrs = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
const char *src = virDomainDiskGetSource(disk);
virJSONValuePtr secobjProps = NULL;
qemuDomainSecretInfoPtr secinfo;
qemuDomainSecretInfoPtr encinfo;
- if (!disk->info.type) {
- if (qemuDomainIsS390CCW(vm->def) &&
- virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW))
- disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
- else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390))
- disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390;
- } else {
- if (!qemuDomainCheckCCWS390AddressSupport(vm->def, disk->info, priv->qemuCaps,
- disk->dst))
- goto cleanup;
- }
-
if (qemuDomainPrepareDisk(driver, vm, disk, NULL, false) < 0)
goto cleanup;
- if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
- if (!(ccwaddrs = qemuDomainCCWAddrSetCreateFromDomain(vm->def)))
- goto error;
- if (virDomainCCWAddressAssign(&disk->info, ccwaddrs,
- !disk->info.addr.ccw.assigned) < 0)
- goto error;
- } else if (!disk->info.type ||
- disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
- if (qemuDomainEnsurePCIAddress(vm, &dev, driver) < 0)
- goto error;
- }
- releaseaddr = true;
+ if (qemuDomainEnsureVirtioAddress(&releaseaddr, vm, &dev, disk->dst) < 0)
+ goto error;
+
if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0)
goto error;
virJSONValueFree(secobjProps);
virJSONValueFree(encobjProps);
qemuDomainSecretDiskDestroy(disk);
- virDomainCCWAddressSetFree(ccwaddrs);
VIR_FREE(devstr);
VIR_FREE(drivestr);
VIR_FREE(drivealias);