Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
libvirt.20357
6d786f95-qemu-fix-dom-caps.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 6d786f95-qemu-fix-dom-caps.patch of Package libvirt.20357
commit 6d786f95a366600e7bbae68c1b324a8131f5e2c5 Author: Daniel P. Berrangé <berrange@redhat.com> Date: Fri Jan 17 13:25:02 2020 +0000 qemu: fixing auto-detecting binary in domain capabilities The virConnectGetDomainCapabilities API accepts either a binary path to the emulator, or desired guest arch. If guest arch is not given, then the host arch is assumed. In the case where the binary is not given, the code tried to find the emulator binary in the existing list of cached emulator capabilities. This is not valid since we switched to lazy population of the cache in: commit 3dd91af01f30c5bda6328454ef49f3afece755d6 Author: Daniel P. Berrangé <berrange@redhat.com> Date: Mon Dec 2 13:04:26 2019 +0000 qemu: stop creating capabilities at driver startup As a result of this change, if there are no persistent guests defined using the requested guest architecture, virConnectGetDomainCapabilities will fail to find an emulator binary. The solution is to stop relying on the cached capabilities to find the binary and instead use the same logic we use to pick default a binary per arch when populating capabilities. Tested-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Tested-by: Richard W.M. Jones <rjones@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Index: libvirt-6.0.0/src/qemu/qemu_capabilities.c =================================================================== --- libvirt-6.0.0.orig/src/qemu/qemu_capabilities.c +++ libvirt-6.0.0/src/qemu/qemu_capabilities.c @@ -5388,10 +5388,13 @@ virQEMUCapsCacheLookupDefault(virFileCac const char **retMachine) { int virttype = VIR_DOMAIN_VIRT_NONE; - int arch = virArchFromHost(); + virArch hostarch = virArchFromHost(); + virArch arch = hostarch; virDomainVirtType capsType; virQEMUCapsPtr qemuCaps = NULL; virQEMUCapsPtr ret = NULL; + virArch arch_from_caps; + g_autofree char *probedbinary = NULL; if (virttypeStr && (virttype = virDomainVirtTypeFromString(virttypeStr)) < 0) { @@ -5407,31 +5410,27 @@ virQEMUCapsCacheLookupDefault(virFileCac goto cleanup; } - if (binary) { - virArch arch_from_caps; - - if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary))) - goto cleanup; + if (!binary) { + probedbinary = virQEMUCapsGetDefaultEmulator(hostarch, arch); + binary = probedbinary; + } - arch_from_caps = virQEMUCapsGetArch(qemuCaps); + if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary))) + goto cleanup; - if (arch_from_caps != arch && - !((ARCH_IS_X86(arch) && ARCH_IS_X86(arch_from_caps)) || - (ARCH_IS_PPC(arch) && ARCH_IS_PPC(arch_from_caps)) || - (ARCH_IS_ARM(arch) && ARCH_IS_ARM(arch_from_caps)) || - (ARCH_IS_S390(arch) && ARCH_IS_S390(arch_from_caps)))) { - virReportError(VIR_ERR_INVALID_ARG, - _("architecture from emulator '%s' doesn't " - "match given architecture '%s'"), - virArchToString(arch_from_caps), - virArchToString(arch)); - goto cleanup; - } - } else { - if (!(qemuCaps = virQEMUCapsCacheLookupByArch(cache, arch))) - goto cleanup; + arch_from_caps = virQEMUCapsGetArch(qemuCaps); - binary = virQEMUCapsGetBinary(qemuCaps); + if (arch_from_caps != arch && + !((ARCH_IS_X86(arch) && ARCH_IS_X86(arch_from_caps)) || + (ARCH_IS_PPC(arch) && ARCH_IS_PPC(arch_from_caps)) || + (ARCH_IS_ARM(arch) && ARCH_IS_ARM(arch_from_caps)) || + (ARCH_IS_S390(arch) && ARCH_IS_S390(arch_from_caps)))) { + virReportError(VIR_ERR_INVALID_ARG, + _("architecture from emulator '%s' doesn't " + "match given architecture '%s'"), + virArchToString(arch_from_caps), + virArchToString(arch)); + goto cleanup; } if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor