提交 5ec76b0c 编写于 作者: J Ján Tomko

Move qemuCheckCCWS390AddressSupport to qemu_domain

Let it be reused in qemu_domain_address.
上级 fef28553
...@@ -1262,46 +1262,6 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk) ...@@ -1262,46 +1262,6 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk)
} }
/* Check whether the device address is using either 'ccw' or default s390
* address format and whether that's "legal" for the current qemu and/or
* guest os.machine type. This is the corollary to the code which doesn't
* find the address type set using an emulator that supports either 'ccw'
* or s390 and sets the address type based on the capabilities.
*
* If the address is using 'ccw' or s390 and it's not supported, generate
* an error and return false; otherwise, return true.
*/
bool
qemuCheckCCWS390AddressSupport(const virDomainDef *def,
virDomainDeviceInfo info,
virQEMUCapsPtr qemuCaps,
const char *devicename)
{
if (info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
if (!qemuDomainIsS390CCW(def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("cannot use CCW address type for device "
"'%s' using machine type '%s'"),
devicename, def->os.machine);
return false;
} else if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_CCW)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("CCW address type is not supported by "
"this QEMU"));
return false;
}
} else if (info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_S390)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("virtio S390 address type is not supported by "
"this QEMU"));
return false;
}
}
return true;
}
/* QEMU 1.2 and later have a binary flag -enable-fips that must be /* QEMU 1.2 and later have a binary flag -enable-fips that must be
* used for VNC auth to obey FIPS settings; but the flag only * used for VNC auth to obey FIPS settings; but the flag only
* exists on Linux, and with no way to probe for it via QMP. Our * exists on Linux, and with no way to probe for it via QMP. Our
...@@ -1951,7 +1911,7 @@ qemuBuildDriveDevStr(const virDomainDef *def, ...@@ -1951,7 +1911,7 @@ qemuBuildDriveDevStr(const virDomainDef *def,
if (qemuCheckDiskConfig(disk) < 0) if (qemuCheckDiskConfig(disk) < 0)
goto error; goto error;
if (!qemuCheckCCWS390AddressSupport(def, disk->info, qemuCaps, disk->dst)) if (!qemuDomainCheckCCWS390AddressSupport(def, disk->info, qemuCaps, disk->dst))
goto error; goto error;
if (disk->iothread && !qemuCheckIOThreads(def, disk)) if (disk->iothread && !qemuCheckIOThreads(def, disk))
...@@ -2685,8 +2645,8 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, ...@@ -2685,8 +2645,8 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
*devstr = NULL; *devstr = NULL;
if (!qemuCheckCCWS390AddressSupport(domainDef, def->info, qemuCaps, if (!qemuDomainCheckCCWS390AddressSupport(domainDef, def->info, qemuCaps,
"controller")) "controller"))
return -1; return -1;
if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
...@@ -5895,8 +5855,8 @@ qemuBuildRNGDevStr(const virDomainDef *def, ...@@ -5895,8 +5855,8 @@ qemuBuildRNGDevStr(const virDomainDef *def,
goto error; goto error;
} }
if (!qemuCheckCCWS390AddressSupport(def, dev->info, qemuCaps, if (!qemuDomainCheckCCWS390AddressSupport(def, dev->info, qemuCaps,
dev->source.file)) dev->source.file))
goto error; goto error;
if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)
......
...@@ -182,11 +182,6 @@ int qemuCheckDiskConfig(virDomainDiskDefPtr disk); ...@@ -182,11 +182,6 @@ int qemuCheckDiskConfig(virDomainDiskDefPtr disk);
bool bool
qemuCheckFips(void); qemuCheckFips(void);
bool qemuCheckCCWS390AddressSupport(const virDomainDef *def,
virDomainDeviceInfo info,
virQEMUCapsPtr qemuCaps,
const char *devicename);
virJSONValuePtr qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu) virJSONValuePtr qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu)
ATTRIBUTE_NONNULL(1); ATTRIBUTE_NONNULL(1);
......
...@@ -10162,3 +10162,43 @@ qemuDomainGetMachineName(virDomainObjPtr vm) ...@@ -10162,3 +10162,43 @@ qemuDomainGetMachineName(virDomainObjPtr vm)
return ret; return ret;
} }
/* Check whether the device address is using either 'ccw' or default s390
* address format and whether that's "legal" for the current qemu and/or
* guest os.machine type. This is the corollary to the code which doesn't
* find the address type set using an emulator that supports either 'ccw'
* or s390 and sets the address type based on the capabilities.
*
* If the address is using 'ccw' or s390 and it's not supported, generate
* an error and return false; otherwise, return true.
*/
bool
qemuDomainCheckCCWS390AddressSupport(const virDomainDef *def,
virDomainDeviceInfo info,
virQEMUCapsPtr qemuCaps,
const char *devicename)
{
if (info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
if (!qemuDomainIsS390CCW(def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("cannot use CCW address type for device "
"'%s' using machine type '%s'"),
devicename, def->os.machine);
return false;
} else if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_CCW)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("CCW address type is not supported by "
"this QEMU"));
return false;
}
} else if (info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_S390)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("virtio S390 address type is not supported by "
"this QEMU"));
return false;
}
}
return true;
}
...@@ -987,4 +987,9 @@ int ...@@ -987,4 +987,9 @@ int
qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt, qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
virTristateBool *allowReboot); virTristateBool *allowReboot);
bool qemuDomainCheckCCWS390AddressSupport(const virDomainDef *def,
virDomainDeviceInfo info,
virQEMUCapsPtr qemuCaps,
const char *devicename);
#endif /* __QEMU_DOMAIN_H__ */ #endif /* __QEMU_DOMAIN_H__ */
...@@ -379,8 +379,8 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, ...@@ -379,8 +379,8 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390))
disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390;
} else { } else {
if (!qemuCheckCCWS390AddressSupport(vm->def, disk->info, priv->qemuCaps, if (!qemuDomainCheckCCWS390AddressSupport(vm->def, disk->info, priv->qemuCaps,
disk->dst)) disk->dst))
goto cleanup; goto cleanup;
} }
...@@ -553,8 +553,8 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, ...@@ -553,8 +553,8 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver,
else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390))
controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; controller->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390;
} else { } else {
if (!qemuCheckCCWS390AddressSupport(vm->def, controller->info, if (!qemuDomainCheckCCWS390AddressSupport(vm->def, controller->info,
priv->qemuCaps, "controller")) priv->qemuCaps, "controller"))
goto cleanup; goto cleanup;
} }
...@@ -2158,8 +2158,8 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, ...@@ -2158,8 +2158,8 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
rng->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390; rng->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390;
} }
} else { } else {
if (!qemuCheckCCWS390AddressSupport(vm->def, rng->info, priv->qemuCaps, if (!qemuDomainCheckCCWS390AddressSupport(vm->def, rng->info, priv->qemuCaps,
"rng")) "rng"))
goto cleanup; goto cleanup;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册