https://bugzilla.redhat.com/show_bug.cgi?id=1375423 Signed-off-by: Han Han <hhan@xxxxxxxxxx> --- src/conf/domain_conf.c | 30 ++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 3 +++ src/libvirt_private.syms | 1 + src/qemu/qemu_driver.c | 10 +++++++++- 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 237540bccc..a2655bc29b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -17652,6 +17652,36 @@ virDomainVsockDefEquals(const virDomainVsockDef *a, } +static bool +virDomainHubDefEquals(const virDomainHubDef *a, + const virDomainHubDef *b) +{ + if (a->type != b->type) + return false; + + if (a->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && + !virDomainDeviceInfoAddressIsEqual(&a->info, &b->info)) + return false; + + return true; +} + + +ssize_t +virDomainHubDefFind(const virDomainDef *def, + const virDomainHubDef *hub) +{ + size_t i; + + for (i = 0; i < def->nhubs; i++) { + if (virDomainHubDefEquals(hub, def->hubs[i])) + return i; + } + + return -1; +} + + char * virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e30a4b2fe7..c2d0877170 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3365,6 +3365,9 @@ virDomainShmemDefPtr virDomainShmemDefRemove(virDomainDefPtr def, size_t idx) ssize_t virDomainInputDefFind(const virDomainDef *def, const virDomainInputDef *input) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; +ssize_t virDomainHubDefFind(const virDomainDef *def, + const virDomainHubDef *hub) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; bool virDomainVsockDefEquals(const virDomainVsockDef *a, const virDomainVsockDef *b) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 335210c31d..6245927673 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -399,6 +399,7 @@ virDomainHostdevRemove; virDomainHostdevSubsysPCIBackendTypeToString; virDomainHostdevSubsysTypeToString; virDomainHPTResizingTypeToString; +virDomainHubDefFind; virDomainHubTypeFromString; virDomainHubTypeToString; virDomainHypervTypeFromString; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1e5a69358b..4209f017c7 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -8338,10 +8338,18 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef, vmdef->vsock = NULL; break; + case VIR_DOMAIN_DEVICE_HUB: + if ((idx = virDomainHubDefFind(vmdef, dev->data.hub)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("matching hub device not found")); + return -1; + } + VIR_DELETE_ELEMENT(vmdef->hubs, idx, vmdef->nhubs); + break; + case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_GRAPHICS: - case VIR_DOMAIN_DEVICE_HUB: case VIR_DOMAIN_DEVICE_SMARTCARD: case VIR_DOMAIN_DEVICE_MEMBALLOON: case VIR_DOMAIN_DEVICE_NVRAM: -- 2.19.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list