Hello community, here is the log from the commit of package libvirt for openSUSE:Factory checked in at 2020-01-13 22:17:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libvirt (Old) and /work/SRC/openSUSE:Factory/.libvirt.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvirt" Mon Jan 13 22:17:11 2020 rev:296 rq:762487 version:5.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libvirt/libvirt.changes 2020-01-01 14:56:50.417885401 +0100 +++ /work/SRC/openSUSE:Factory/.libvirt.new.6675/libvirt.changes 2020-01-13 22:19:00.142448041 +0100 @@ -1,0 +2,9 @@ +Thu Jan 9 01:33:23 UTC 2020 - James Fehlig <jfeh...@suse.com> + +- qemu: Fix firmware auto detection + 50d7465f-qemu-firmware1.patch, 57f9067c-qemu-firmware2.patch, + 7c5264d2-qemu-firmware3.patch, 8e1804f9-qemu-firmware4.patch, + 8fcee478-qemu-firmware5.patch + boo#1157378, bsc#1159796 + +------------------------------------------------------------------- New: ---- 50d7465f-qemu-firmware1.patch 57f9067c-qemu-firmware2.patch 7c5264d2-qemu-firmware3.patch 8e1804f9-qemu-firmware4.patch 8fcee478-qemu-firmware5.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libvirt.spec ++++++ --- /var/tmp/diff_new_pack.vBB00O/_old 2020-01-13 22:19:03.502449600 +0100 +++ /var/tmp/diff_new_pack.vBB00O/_new 2020-01-13 22:19:03.506449602 +0100 @@ -1,7 +1,7 @@ # # spec file for package libvirt # -# Copyright (c) 2019 SUSE LLC +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -346,6 +346,11 @@ Patch0: 0a65cba4-news-fix.patch Patch1: 07aaced4-Add-TAA-No.patch Patch2: f411b7ef6-Add-TSX-CTRL.patch +Patch3: 50d7465f-qemu-firmware1.patch +Patch4: 57f9067c-qemu-firmware2.patch +Patch5: 7c5264d2-qemu-firmware3.patch +Patch6: 8e1804f9-qemu-firmware4.patch +Patch7: 8fcee478-qemu-firmware5.patch # Patches pending upstream review Patch100: libxl-dom-reset.patch Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch @@ -882,6 +887,11 @@ %patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 %patch100 -p1 %patch101 -p1 %patch150 -p1 ++++++ 0001-Extract-stats-functions-from-the-qemu-driver.patch ++++++ --- /var/tmp/diff_new_pack.vBB00O/_old 2020-01-13 22:19:03.538449616 +0100 +++ /var/tmp/diff_new_pack.vBB00O/_new 2020-01-13 22:19:03.538449616 +0100 @@ -213,7 +213,7 @@ =================================================================== --- libvirt-5.10.0.orig/src/libvirt_private.syms +++ libvirt-5.10.0/src/libvirt_private.syms -@@ -697,6 +697,9 @@ virDomainConfNWFilterInstantiate; +@@ -699,6 +699,9 @@ virDomainConfNWFilterInstantiate; virDomainConfNWFilterTeardown; virDomainConfVMNWFilterTeardown; @@ -223,7 +223,7 @@ # conf/interface_conf.h virInterfaceDefFormat; -@@ -1669,6 +1672,7 @@ virCgroupGetMemoryUsage; +@@ -1671,6 +1674,7 @@ virCgroupGetMemoryUsage; virCgroupGetMemSwapHardLimit; virCgroupGetMemSwapUsage; virCgroupGetPercpuStats; @@ -243,7 +243,7 @@ #include "domain_audit.h" #include "node_device_conf.h" #include "virpci.h" -@@ -20389,13 +20390,7 @@ qemuDomainGetStatsState(virQEMUDriverPtr +@@ -20388,13 +20389,7 @@ qemuDomainGetStatsState(virQEMUDriverPtr virTypedParamListPtr params, unsigned int privflags G_GNUC_UNUSED) { @@ -258,7 +258,7 @@ } -@@ -20596,17 +20591,7 @@ qemuDomainGetStatsCpuCgroup(virDomainObj +@@ -20595,17 +20590,7 @@ qemuDomainGetStatsCpuCgroup(virDomainObj if (!priv->cgroup) return 0; @@ -277,7 +277,7 @@ } -@@ -20763,76 +20748,15 @@ qemuDomainGetStatsVcpu(virQEMUDriverPtr +@@ -20762,76 +20747,15 @@ qemuDomainGetStatsVcpu(virQEMUDriverPtr return ret; } ++++++ 50d7465f-qemu-firmware1.patch ++++++ commit 50d7465f3d5e7ee23af91059784bc51f4c316481 Author: Michal Prívozník <mpriv...@redhat.com> Date: Fri Dec 13 15:41:16 2019 +0100 qemu_firmware: Pass virDomainDef into qemuFirmwareFillDomain() This function needs domain definition really, we don't need to pass the whole domain object. This saves couple of dereferences and characters esp. in more checks to come. Signed-off-by: Michal Privoznik <mpriv...@redhat.com> Reviewed-by: Cole Robinson <crobi...@redhat.com> Reviewed-by: Daniel P. Berrangé <berra...@redhat.com> Index: libvirt-5.10.0/src/qemu/qemu_firmware.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_firmware.c +++ libvirt-5.10.0/src/qemu/qemu_firmware.c @@ -1204,7 +1204,7 @@ qemuFirmwareFetchParsedConfigs(bool priv int qemuFirmwareFillDomain(virQEMUDriverPtr driver, - virDomainObjPtr vm, + virDomainDefPtr def, unsigned int flags) { VIR_AUTOSTRINGLIST paths = NULL; @@ -1217,7 +1217,7 @@ qemuFirmwareFillDomain(virQEMUDriverPtr if (!(flags & VIR_QEMU_PROCESS_START_NEW)) return 0; - if (vm->def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) + if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) return 0; if ((nfirmwares = qemuFirmwareFetchParsedConfigs(driver->privileged, @@ -1225,7 +1225,7 @@ qemuFirmwareFillDomain(virQEMUDriverPtr return -1; for (i = 0; i < nfirmwares; i++) { - if (qemuFirmwareMatchDomain(vm->def, firmwares[i], paths[i])) { + if (qemuFirmwareMatchDomain(def, firmwares[i], paths[i])) { theone = firmwares[i]; VIR_DEBUG("Found matching firmware (description path '%s')", paths[i]); @@ -1236,7 +1236,7 @@ qemuFirmwareFillDomain(virQEMUDriverPtr if (!theone) { virReportError(VIR_ERR_OPERATION_FAILED, _("Unable to find any firmware to satisfy '%s'"), - virDomainOsDefFirmwareTypeToString(vm->def->os.firmware)); + virDomainOsDefFirmwareTypeToString(def->os.firmware)); goto cleanup; } @@ -1245,10 +1245,10 @@ qemuFirmwareFillDomain(virQEMUDriverPtr * likely that admin/FW manufacturer messed up. */ qemuFirmwareSanityCheck(theone, paths[i]); - if (qemuFirmwareEnableFeatures(driver, vm->def, theone) < 0) + if (qemuFirmwareEnableFeatures(driver, def, theone) < 0) goto cleanup; - vm->def->os.firmware = VIR_DOMAIN_OS_DEF_FIRMWARE_NONE; + def->os.firmware = VIR_DOMAIN_OS_DEF_FIRMWARE_NONE; ret = 0; cleanup: Index: libvirt-5.10.0/src/qemu/qemu_firmware.h =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_firmware.h +++ libvirt-5.10.0/src/qemu/qemu_firmware.h @@ -45,7 +45,7 @@ qemuFirmwareFetchConfigs(char ***firmwar int qemuFirmwareFillDomain(virQEMUDriverPtr driver, - virDomainObjPtr vm, + virDomainDefPtr def, unsigned int flags); int Index: libvirt-5.10.0/src/qemu/qemu_process.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_process.c +++ libvirt-5.10.0/src/qemu/qemu_process.c @@ -6289,7 +6289,7 @@ qemuProcessPrepareDomain(virQEMUDriverPt goto cleanup; VIR_DEBUG("Prepare bios/uefi paths"); - if (qemuFirmwareFillDomain(driver, vm, flags) < 0) + if (qemuFirmwareFillDomain(driver, vm->def, flags) < 0) goto cleanup; if (qemuDomainInitializePflashStorageSource(vm) < 0) goto cleanup; ++++++ 57f9067c-qemu-firmware2.patch ++++++ commit 57f9067ca3efffcfbbc7cd3f435482b63f875b72 Author: Michal Prívozník <mpriv...@redhat.com> Date: Tue Jan 7 10:10:02 2020 +0100 qemu_firmware: Introduce @want variable to qemuFirmwareMatchDomain() This simplifies condition when matching FW interface by having a single line condition instead of multiline one. Also, it prepares the code for future expansion. Signed-off-by: Michal Privoznik <mpriv...@redhat.com> Reviewed-by: Daniel P. Berrangé <berra...@redhat.com> Index: libvirt-5.10.0/src/qemu/qemu_firmware.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_firmware.c +++ libvirt-5.10.0/src/qemu/qemu_firmware.c @@ -930,22 +930,39 @@ qemuFirmwareMatchesMachineArch(const qem } +static qemuFirmwareOSInterface +qemuFirmwareOSInterfaceTypeFromOsDefFirmware(virDomainOsDefFirmware fw) +{ + switch (fw) { + case VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS: + return QEMU_FIRMWARE_OS_INTERFACE_BIOS; + case VIR_DOMAIN_OS_DEF_FIRMWARE_EFI: + return QEMU_FIRMWARE_OS_INTERFACE_UEFI; + case VIR_DOMAIN_OS_DEF_FIRMWARE_NONE: + case VIR_DOMAIN_OS_DEF_FIRMWARE_LAST: + break; + } + + return QEMU_FIRMWARE_OS_INTERFACE_NONE; +} + + static bool qemuFirmwareMatchDomain(const virDomainDef *def, const qemuFirmware *fw, const char *path) { size_t i; + qemuFirmwareOSInterface want; bool supportsS3 = false; bool supportsS4 = false; bool requiresSMM = false; bool supportsSEV = false; + want = qemuFirmwareOSInterfaceTypeFromOsDefFirmware(def->os.firmware); + for (i = 0; i < fw->ninterfaces; i++) { - if ((def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS && - fw->interfaces[i] == QEMU_FIRMWARE_OS_INTERFACE_BIOS) || - (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_EFI && - fw->interfaces[i] == QEMU_FIRMWARE_OS_INTERFACE_UEFI)) + if (fw->interfaces[i] == want) break; } ++++++ 7c5264d2-qemu-firmware3.patch ++++++ commit 7c5264d2bee6c0bce152f5159f70e525ef0d0ebc Author: Michal Prívozník <mpriv...@redhat.com> Date: Tue Jan 7 10:34:03 2020 +0100 src: Introduce and use virDomainDefHasOldStyleUEFI() and virDomainDefHasOldStyleROUEFI() These functions are meant to replace verbose check for the old style of specifying UEFI with a simple function call. Signed-off-by: Michal Privoznik <mpriv...@redhat.com> Reviewed-by: Daniel P. Berrangé <berra...@redhat.com> Index: libvirt-5.10.0/src/bhyve/bhyve_driver.c =================================================================== --- libvirt-5.10.0.orig/src/bhyve/bhyve_driver.c +++ libvirt-5.10.0/src/bhyve/bhyve_driver.c @@ -714,8 +714,7 @@ bhyveConnectDomainXMLToNative(virConnect if (def->os.bootloader == NULL && def->os.loader) { - if ((def->os.loader->readonly != VIR_TRISTATE_BOOL_YES) || - (def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH)) { + if (!virDomainDefHasOldStyleROUEFI(def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Only read-only pflash is supported.")); goto cleanup; Index: libvirt-5.10.0/src/conf/domain_conf.c =================================================================== --- libvirt-5.10.0.orig/src/conf/domain_conf.c +++ libvirt-5.10.0/src/conf/domain_conf.c @@ -31400,6 +31400,22 @@ virDomainDefHasMdevHostdev(const virDoma } +bool +virDomainDefHasOldStyleUEFI(const virDomainDef *def) +{ + return def->os.loader && + def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH; +} + + +bool +virDomainDefHasOldStyleROUEFI(const virDomainDef *def) +{ + return virDomainDefHasOldStyleUEFI(def) && + def->os.loader->readonly == VIR_TRISTATE_BOOL_YES; +} + + /** * virDomainGraphicsDefHasOpenGL: * @def: domain definition Index: libvirt-5.10.0/src/conf/domain_conf.h =================================================================== --- libvirt-5.10.0.orig/src/conf/domain_conf.h +++ libvirt-5.10.0/src/conf/domain_conf.h @@ -3681,6 +3681,12 @@ bool virDomainDefHasMdevHostdev(const virDomainDef *def); bool +virDomainDefHasOldStyleUEFI(const virDomainDef *def); + +bool +virDomainDefHasOldStyleROUEFI(const virDomainDef *def); + +bool virDomainGraphicsDefHasOpenGL(const virDomainDef *def); bool Index: libvirt-5.10.0/src/libvirt_private.syms =================================================================== --- libvirt-5.10.0.orig/src/libvirt_private.syms +++ libvirt-5.10.0/src/libvirt_private.syms @@ -297,6 +297,8 @@ virDomainDefHasManagedPR; virDomainDefHasMdevHostdev; virDomainDefHasMemballoon; virDomainDefHasMemoryHotplug; +virDomainDefHasOldStyleROUEFI; +virDomainDefHasOldStyleUEFI; virDomainDefHasUSB; virDomainDefHasVcpusOffline; virDomainDefHasVFIOHostdev; Index: libvirt-5.10.0/src/libxl/libxl_conf.c =================================================================== --- libvirt-5.10.0.orig/src/libxl/libxl_conf.c +++ libvirt-5.10.0/src/libxl/libxl_conf.c @@ -546,8 +546,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr de * future, Xen will support a user-specified firmware path. See * http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01628.html */ - if (def->os.loader && - def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH) + if (virDomainDefHasOldStyleUEFI(def)) b_info->u.hvm.bios = LIBXL_BIOS_TYPE_OVMF; if (def->emulator) { Index: libvirt-5.10.0/src/libxl/xen_xl.c =================================================================== --- libvirt-5.10.0.orig/src/libxl/xen_xl.c +++ libvirt-5.10.0/src/libxl/xen_xl.c @@ -1235,11 +1235,9 @@ xenFormatXLOS(virConfPtr conf, virDomain if (xenConfigSetString(conf, "builder", "hvm") < 0) return -1; - if (def->os.loader && - def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH) { - if (xenConfigSetString(conf, "bios", "ovmf") < 0) - return -1; - } + if (virDomainDefHasOldStyleUEFI(def) && + xenConfigSetString(conf, "bios", "ovmf") < 0) + return -1; if (def->os.slic_table && xenConfigSetString(conf, "acpi_firmware", def->os.slic_table) < 0) Index: libvirt-5.10.0/src/qemu/qemu_domain.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_domain.c +++ libvirt-5.10.0/src/qemu/qemu_domain.c @@ -4968,8 +4968,7 @@ qemuDomainDefValidate(const virDomainDef /* On x86, UEFI requires ACPI */ if ((def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_EFI || - (def->os.loader && - def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH)) && + virDomainDefHasOldStyleUEFI(def)) && ARCH_IS_X86(def->os.arch) && def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -4981,8 +4980,7 @@ qemuDomainDefValidate(const virDomainDef if (def->features[VIR_DOMAIN_FEATURE_ACPI] == VIR_TRISTATE_SWITCH_ON && def->os.arch == VIR_ARCH_AARCH64 && (def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_EFI && - (!def->os.loader || - def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH))) { + !virDomainDefHasOldStyleUEFI(def))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("ACPI requires UEFI on this architecture")); goto cleanup; @@ -15545,12 +15543,9 @@ void qemuDomainNVRAMPathGenerate(virQEMUDriverConfigPtr cfg, virDomainDefPtr def) { - if (def->os.loader && - def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH && - def->os.loader->readonly == VIR_TRISTATE_BOOL_YES && + if (virDomainDefHasOldStyleROUEFI(def) && !def->os.loader->nvram) qemuDomainNVRAMPathFormat(cfg, def, &def->os.loader->nvram); - } @@ -15677,8 +15672,7 @@ qemuDomainInitializePflashStorageSource( if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) return 0; - if (!def->os.loader || - def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH) + if (!virDomainDefHasOldStyleUEFI(def)) return 0; if (!(pflash0 = virStorageSourceNew())) Index: libvirt-5.10.0/src/qemu/qemu_driver.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_driver.c +++ libvirt-5.10.0/src/qemu/qemu_driver.c @@ -15129,8 +15129,7 @@ qemuDomainSnapshotPrepare(virDomainObjPt * Avoid the issues by forbidding internal snapshot with pflash completely. */ if (found_internal && - vm->def->os.loader && - vm->def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH) { + virDomainDefHasOldStyleUEFI(vm->def)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("internal snapshots of a VM with pflash based " "firmware are not supported")); ++++++ 8e1804f9-qemu-firmware4.patch ++++++ commit 8e1804f9f66f13ca1412d22bf1a957b6d55a2365 Author: Michal Prívozník <mpriv...@redhat.com> Date: Tue Dec 17 17:45:50 2019 +0100 qemu_firmware: Try to autofill for old style UEFI specification While we discourage people to use the old style of specifying UEFI for their domains (the old style is putting path to the FW image under /domain/os/loader/ whilst the new one is using /domain/os/@firmware), some applications might have not adapted yet. They still rely on libvirt autofilling NVRAM path and figuring out NVRAM template when using the old way (notably virt-install does this). We must preserve backcompat for this previously supported config approach. However, since we really want distro maintainers to leave --with-loader-nvram configure option and rely on JSON descriptors, we need to implement autofilling of NVRAM template for the old way too. Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1782778 RHEL: https://bugzilla.redhat.com/show_bug.cgi?id=1776949 Signed-off-by: Michal Privoznik <mpriv...@redhat.com> Reviewed-by: Daniel P. Berrangé <berra...@redhat.com> Index: libvirt-5.10.0/src/qemu/qemu_firmware.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_firmware.c +++ libvirt-5.10.0/src/qemu/qemu_firmware.c @@ -961,6 +961,21 @@ qemuFirmwareMatchDomain(const virDomainD want = qemuFirmwareOSInterfaceTypeFromOsDefFirmware(def->os.firmware); + if (want == QEMU_FIRMWARE_OS_INTERFACE_NONE && + def->os.loader) { + want = qemuFirmwareOSInterfaceTypeFromOsDefFirmware(def->os.loader->type); + + if (fw->mapping.device != QEMU_FIRMWARE_DEVICE_FLASH || + STRNEQ(def->os.loader->path, fw->mapping.data.flash.executable.filename)) { + VIR_DEBUG("Not matching FW interface %s or loader " + "path '%s' for user provided path '%s'", + qemuFirmwareDeviceTypeToString(fw->mapping.device), + fw->mapping.data.flash.executable.filename, + def->os.loader->path); + return false; + } + } + for (i = 0; i < fw->ninterfaces; i++) { if (fw->interfaces[i] == want) break; @@ -1228,14 +1243,29 @@ qemuFirmwareFillDomain(virQEMUDriverPtr qemuFirmwarePtr *firmwares = NULL; ssize_t nfirmwares = 0; const qemuFirmware *theone = NULL; + bool needResult = true; size_t i; int ret = -1; if (!(flags & VIR_QEMU_PROCESS_START_NEW)) return 0; - if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) - return 0; + /* Fill in FW paths if either os.firmware is enabled, or + * loader path was provided with no nvram varstore. */ + if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) { + /* This is horrific check, but loosely said, if UEFI + * image was provided by the old method (by specifying + * its path in domain XML) but no template for NVRAM was + * specified and the varstore doesn't exist ... */ + if (!virDomainDefHasOldStyleROUEFI(def) || + def->os.loader->templt || + virFileExists(def->os.loader->nvram)) + return 0; + + /* ... then we want to consult JSON FW descriptors first, + * but we don't want to fail if we haven't found a match. */ + needResult = false; + } if ((nfirmwares = qemuFirmwareFetchParsedConfigs(driver->privileged, &firmwares, &paths)) < 0) @@ -1251,9 +1281,16 @@ qemuFirmwareFillDomain(virQEMUDriverPtr } if (!theone) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Unable to find any firmware to satisfy '%s'"), - virDomainOsDefFirmwareTypeToString(def->os.firmware)); + if (needResult) { + virReportError(VIR_ERR_OPERATION_FAILED, + _("Unable to find any firmware to satisfy '%s'"), + virDomainOsDefFirmwareTypeToString(def->os.firmware)); + } else { + VIR_DEBUG("Unable to find NVRAM template for '%s', " + "falling back to old style", + NULLSTR(def->os.loader ? def->os.loader->path : NULL)); + ret = 0; + } goto cleanup; } ++++++ 8fcee478-qemu-firmware5.patch ++++++ commit 8fcee47807d29008632a7ad918cbe93ac0a20597 Author: Michal Prívozník <mpriv...@redhat.com> Date: Wed Jan 8 09:42:47 2020 +0100 qemu_firmware: Accept int in qemuFirmwareOSInterfaceTypeFromOsDefFirmware() The point of this function is to translate virDomainOsDefFirmware enum to qemuFirmwareOSInterface enum. However, with my commit v5.10.0-507-g8e1804f9f6 we are passing a variable type of virDomainLoader enum. Make the function accept both enums and make the enum members correspond to each other. This fixes clang build. Signed-off-by: Michal Privoznik <mpriv...@redhat.com> Reviewed-by: Ján Tomko <jto...@redhat.com> Index: libvirt-5.10.0/src/conf/domain_conf.h =================================================================== --- libvirt-5.10.0.orig/src/conf/domain_conf.h +++ libvirt-5.10.0/src/conf/domain_conf.h @@ -1927,12 +1927,14 @@ struct _virDomainOSEnv { typedef enum { VIR_DOMAIN_OS_DEF_FIRMWARE_NONE = 0, - VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS, - VIR_DOMAIN_OS_DEF_FIRMWARE_EFI, + VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS = VIR_DOMAIN_LOADER_TYPE_ROM, + VIR_DOMAIN_OS_DEF_FIRMWARE_EFI = VIR_DOMAIN_LOADER_TYPE_PFLASH, VIR_DOMAIN_OS_DEF_FIRMWARE_LAST } virDomainOsDefFirmware; +G_STATIC_ASSERT((int)VIR_DOMAIN_OS_DEF_FIRMWARE_LAST == (int)VIR_DOMAIN_LOADER_TYPE_LAST); + VIR_ENUM_DECL(virDomainOsDefFirmware); struct _virDomainOSDef { Index: libvirt-5.10.0/src/qemu/qemu_firmware.c =================================================================== --- libvirt-5.10.0.orig/src/qemu/qemu_firmware.c +++ libvirt-5.10.0/src/qemu/qemu_firmware.c @@ -931,7 +931,7 @@ qemuFirmwareMatchesMachineArch(const qem static qemuFirmwareOSInterface -qemuFirmwareOSInterfaceTypeFromOsDefFirmware(virDomainOsDefFirmware fw) +qemuFirmwareOSInterfaceTypeFromOsDefFirmware(int fw) { switch (fw) { case VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS: ++++++ libxl-set-cach-mode.patch ++++++ --- /var/tmp/diff_new_pack.vBB00O/_old 2020-01-13 22:19:03.642449665 +0100 +++ /var/tmp/diff_new_pack.vBB00O/_new 2020-01-13 22:19:03.646449666 +0100 @@ -7,7 +7,7 @@ =================================================================== --- libvirt-5.10.0.orig/src/libxl/libxl_conf.c +++ libvirt-5.10.0/src/libxl/libxl_conf.c -@@ -869,6 +869,30 @@ libxlDiskSetDiscard(libxl_device_disk *x +@@ -868,6 +868,30 @@ libxlDiskSetDiscard(libxl_device_disk *x #endif } @@ -38,7 +38,7 @@ static char * libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src, const char *username, -@@ -1110,6 +1134,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk +@@ -1109,6 +1133,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) return -1; ++++++ libxl-support-block-script.patch ++++++ --- /var/tmp/diff_new_pack.vBB00O/_old 2020-01-13 22:19:03.654449670 +0100 +++ /var/tmp/diff_new_pack.vBB00O/_new 2020-01-13 22:19:03.654449670 +0100 @@ -11,7 +11,7 @@ =================================================================== --- libvirt-5.10.0.orig/src/libxl/libxl_conf.c +++ libvirt-5.10.0/src/libxl/libxl_conf.c -@@ -869,6 +869,25 @@ libxlDiskSetDiscard(libxl_device_disk *x +@@ -868,6 +868,25 @@ libxlDiskSetDiscard(libxl_device_disk *x #endif } @@ -37,7 +37,7 @@ static void libxlDiskSetCacheMode(libxl_device_disk *x_disk, int cachemode) { -@@ -1009,6 +1028,7 @@ libxlMakeNetworkDiskSrc(virStorageSource +@@ -1008,6 +1027,7 @@ libxlMakeNetworkDiskSrc(virStorageSource int libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) { @@ -45,7 +45,7 @@ const char *driver = virDomainDiskGetDriver(l_disk); int format = virDomainDiskGetFormat(l_disk); int actual_type = virStorageSourceGetActualType(l_disk->src); -@@ -1024,7 +1044,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk +@@ -1023,7 +1043,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk if (libxlMakeNetworkDiskSrc(l_disk->src, &x_disk->pdev_path) < 0) return -1; } else { @@ -54,7 +54,7 @@ } x_disk->vdev = g_strdup(l_disk->dst); -@@ -1135,6 +1155,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk +@@ -1134,6 +1154,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) return -1; libxlDiskSetCacheMode(x_disk, l_disk->cachemode); ++++++ suse-libxl-disable-autoballoon.patch ++++++ --- /var/tmp/diff_new_pack.vBB00O/_old 2020-01-13 22:19:03.698449691 +0100 +++ /var/tmp/diff_new_pack.vBB00O/_new 2020-01-13 22:19:03.698449691 +0100 @@ -31,7 +31,7 @@ =================================================================== --- libvirt-5.10.0.orig/src/libxl/libxl_conf.c +++ libvirt-5.10.0/src/libxl/libxl_conf.c -@@ -1704,15 +1704,12 @@ libxlMakeBuildInfoVfb(virPortAllocatorRa +@@ -1703,15 +1703,12 @@ libxlMakeBuildInfoVfb(virPortAllocatorRa /* * Get domain0 autoballoon configuration. Honor user-specified * setting in libxl.conf first. If not specified, autoballooning @@ -48,7 +48,7 @@ int res; res = virConfGetValueBool(conf, "autoballoon", &cfg->autoballoon); -@@ -1721,15 +1718,8 @@ libxlGetAutoballoonConf(libxlDriverConfi +@@ -1720,15 +1717,8 @@ libxlGetAutoballoonConf(libxlDriverConfi else if (res == 1) return 0;