1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-02-28 13:57:42 +03:00

qemuDomainAttachChrDeviceAssignAddr: Simplify return value handling

Rather than returning a different error code if the device address needs
to be released pass in the 'need_release' flag via a pointer.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2021-11-18 14:58:26 +01:00
parent b01183a9b9
commit a9d16dea49

View File

@ -2125,13 +2125,12 @@ qemuDomainChrRemove(virDomainDef *vmdef,
return ret; return ret;
} }
/* Returns 1 if the address will need to be released later,
* -1 on error
* 0 otherwise
*/
static int static int
qemuDomainAttachChrDeviceAssignAddr(virDomainObj *vm, qemuDomainAttachChrDeviceAssignAddr(virDomainObj *vm,
virDomainChrDef *chr) virDomainChrDef *chr,
bool *need_release)
{ {
virDomainDef *def = vm->def; virDomainDef *def = vm->def;
qemuDomainObjPrivate *priv = vm->privateData; qemuDomainObjPrivate *priv = vm->privateData;
@ -2147,13 +2146,16 @@ qemuDomainAttachChrDeviceAssignAddr(virDomainObj *vm,
chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI) { chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI) {
if (qemuDomainEnsurePCIAddress(vm, &dev) < 0) if (qemuDomainEnsurePCIAddress(vm, &dev) < 0)
return -1; return -1;
return 1;
*need_release = true;
return 0;
} else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL && } else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB) { chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB) {
if (virDomainUSBAddressEnsure(priv->usbaddrs, &chr->info) < 0) if (virDomainUSBAddressEnsure(priv->usbaddrs, &chr->info) < 0)
return -1; return -1;
return 1;
*need_release = true;
return 0;
} else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && } else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO) { chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO) {
@ -2176,7 +2178,7 @@ int qemuDomainAttachChrDevice(virQEMUDriver *driver,
virDomainObj *vm, virDomainObj *vm,
virDomainChrDef *chr) virDomainChrDef *chr)
{ {
int ret = -1, rc; int ret = -1;
qemuDomainObjPrivate *priv = vm->privateData; qemuDomainObjPrivate *priv = vm->privateData;
virErrorPtr orig_err; virErrorPtr orig_err;
virDomainDef *vmdef = vm->def; virDomainDef *vmdef = vm->def;
@ -2203,10 +2205,8 @@ int qemuDomainAttachChrDevice(virQEMUDriver *driver,
if (qemuAssignDeviceChrAlias(vmdef, chr, -1) < 0) if (qemuAssignDeviceChrAlias(vmdef, chr, -1) < 0)
goto cleanup; goto cleanup;
if ((rc = qemuDomainAttachChrDeviceAssignAddr(vm, chr)) < 0) if (qemuDomainAttachChrDeviceAssignAddr(vm, chr, &need_release) < 0)
goto cleanup; goto cleanup;
if (rc == 1)
need_release = true;
if (qemuDomainNamespaceSetupChardev(vm, chr, &teardowndevice) < 0) if (qemuDomainNamespaceSetupChardev(vm, chr, &teardowndevice) < 0)
goto cleanup; goto cleanup;