From: Pavel Hrdina Date: Sat, 14 Feb 2026 10:39:19 +0000 (+0100) Subject: qemuxmlconftest: Refactor host device preparation X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb23831c020a5fab33be417426b2746a73ecdd10;p=thirdparty%2Flibvirt.git qemuxmlconftest: Refactor host device preparation Create a single place for host device preparation code. Signed-off-by: Pavel Hrdina Reviewed-by: Michal Privoznik --- diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 5fddf3a523..321c444d77 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -378,6 +378,54 @@ testSetupHostdevPrivateData(virDomainDef *def) } +static void +testQemuPrepareHostdevUSB(virDomainHostdevDef *hostdev) +{ + virDomainHostdevSubsysUSB *usb = &hostdev->source.subsys.u.usb; + + if (!usb->device && !usb->bus) { + if (usb->vendor == 0x1234 && usb->product == 0x4321) { + usb->bus = 42; + usb->device = 0x1234; + } else { + g_assert_not_reached(); + } + } else if (!usb->device && !usb->vendor && !usb->product) { + if (usb->bus == 2 && STREQ(usb->port, "3")) { + usb->device = 4; + } else { + g_assert_not_reached(); + } + } +} + + +static void +testQemuPrepareHostdev(virDomainObj *vm) +{ + size_t i; + + for (i = 0; i < vm->def->nhostdevs; i++) { + virDomainHostdevDef *hostdev = vm->def->hostdevs[i]; + + if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + continue; + + switch (hostdev->source.subsys.type) { + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: + testQemuPrepareHostdevUSB(hostdev); + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: + break; + } + } +} + + static virNetworkDriver fakeNetworkDriver = { .networkLookupByName = fakeNetworkLookupByName, .networkGetXMLDesc = fakeNetworkGetXMLDesc, @@ -524,28 +572,7 @@ testCompareXMLToArgvCreateArgs(virQEMUDriver *drv, } } - for (i = 0; i < vm->def->nhostdevs; i++) { - virDomainHostdevDef *hostdev = vm->def->hostdevs[i]; - - if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { - virDomainHostdevSubsysUSB *usb = &hostdev->source.subsys.u.usb; - if (!usb->device && !usb->bus) { - if (usb->vendor == 0x1234 && usb->product == 0x4321) { - usb->bus = 42; - usb->device = 0x1234; - } else { - g_assert_not_reached(); - } - } else if (!usb->device && !usb->vendor && !usb->product) { - if (usb->bus == 2 && STREQ(usb->port, "3")) { - usb->device = 4; - } else { - g_assert_not_reached(); - } - } - } - } + testQemuPrepareHostdev(vm); if (flags & FLAG_SLIRP_HELPER) { for (i = 0; i < vm->def->nnets; i++) {