diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 0578e02bd0..2e0c9818db 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -1201,6 +1201,27 @@ virDomainVirtioSerialAddrAutoAssignFromCache(virDomainDefPtr def, return virDomainVirtioSerialAddrAssign(def, addrs, info, allowZero, portOnly); } +int +virDomainVirtioSerialAddrAutoAssign(virDomainDefPtr def, + virDomainDeviceInfoPtr info, + bool allowZero) +{ + virDomainVirtioSerialAddrSetPtr addrs = NULL; + int ret = -1; + + if (!(addrs = virDomainVirtioSerialAddrSetCreateFromDomain(def))) + goto cleanup; + + if (virDomainVirtioSerialAddrAutoAssignFromCache(def, addrs, info, allowZero) < 0) + goto cleanup; + + ret = 0; + + cleanup: + virDomainVirtioSerialAddrSetFree(addrs); + return ret; +} + int virDomainVirtioSerialAddrAssign(virDomainDefPtr def, diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h index 147419a97f..7b6fff058a 100644 --- a/src/conf/domain_addr.h +++ b/src/conf/domain_addr.h @@ -230,6 +230,12 @@ virDomainVirtioSerialAddrAutoAssignFromCache(virDomainDefPtr def, bool allowZero) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); +int +virDomainVirtioSerialAddrAutoAssign(virDomainDefPtr def, + virDomainDeviceInfoPtr info, + bool allowZero) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + int virDomainVirtioSerialAddrAssign(virDomainDefPtr def, virDomainVirtioSerialAddrSetPtr addrs, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index e78eeb6885..d2156bd725 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -123,6 +123,7 @@ virDomainUSBAddressSetAddHub; virDomainUSBAddressSetCreate; virDomainUSBAddressSetFree; virDomainVirtioSerialAddrAssign; +virDomainVirtioSerialAddrAutoAssign; virDomainVirtioSerialAddrAutoAssignFromCache; virDomainVirtioSerialAddrIsComplete; virDomainVirtioSerialAddrRelease; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 67688e16d0..61edfe7061 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1763,15 +1763,10 @@ qemuDomainAttachChrDeviceAssignAddr(virDomainObjPtr vm, virDomainDefPtr def = vm->def; qemuDomainObjPrivatePtr priv = vm->privateData; int ret = -1; - virDomainVirtioSerialAddrSetPtr vioaddrs = NULL; - - if (!(vioaddrs = virDomainVirtioSerialAddrSetCreateFromDomain(def))) - goto cleanup; if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE && chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO) { - if (virDomainVirtioSerialAddrAutoAssignFromCache(NULL, vioaddrs, - &chr->info, true) < 0) + if (virDomainVirtioSerialAddrAutoAssign(def, &chr->info, true) < 0) goto cleanup; ret = 1; @@ -1789,8 +1784,7 @@ qemuDomainAttachChrDeviceAssignAddr(virDomainObjPtr vm, } else if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO) { - if (virDomainVirtioSerialAddrAutoAssignFromCache(NULL, vioaddrs, - &chr->info, false) < 0) + if (virDomainVirtioSerialAddrAutoAssign(def, &chr->info, false) < 0) goto cleanup; ret = 1; } @@ -1808,7 +1802,6 @@ qemuDomainAttachChrDeviceAssignAddr(virDomainObjPtr vm, ret = 0; cleanup: - virDomainVirtioSerialAddrSetFree(vioaddrs); return ret; }