[libvirt] [PATCH 07/22] qemu_capabilities: Introduce virQEMUCapsCacheLookupDefault
Jiri Denemark
jdenemar at redhat.com
Wed May 23 12:48:53 UTC 2018
On Tue, May 22, 2018 at 18:24:57 -0400, Collin Walling wrote:
> On 05/16/2018 04:39 AM, Jiri Denemark wrote:
> > virConnectGetDomainCapabilities needs to lookup QEMU capabilities
> > matching a specified binary, architecture, virt type, and machine type
> > while using default values when any of the parameters are not provided
> > by the user. Let's extract the lookup code into
> > virQEMUCapsCacheLookupDefault to make it reusable.
> >
> > Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> > ---
> > src/qemu/qemu_capabilities.c | 118 +++++++++++++++++++++++++++++++++++
> > src/qemu/qemu_capabilities.h | 8 +++
> > src/qemu/qemu_driver.c | 86 ++++---------------------
> > 3 files changed, 137 insertions(+), 75 deletions(-)
> >
>
> [...]
>
> >
> > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> > index 9037818e2a..6c086b9ef8 100644
> > --- a/src/qemu/qemu_driver.c
> > +++ b/src/qemu/qemu_driver.c
> > @@ -19249,10 +19249,9 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
> > char *ret = NULL;
> > virQEMUDriverPtr driver = conn->privateData;
> > virQEMUCapsPtr qemuCaps = NULL;
> > - int virttype = VIR_DOMAIN_VIRT_NONE;
> > - virDomainVirtType capsType;
> > + virArch arch;
> > + virDomainVirtType virttype;
> > virDomainCapsPtr domCaps = NULL;
> > - int arch = virArchFromHost(); /* virArch */
> > virQEMUDriverConfigPtr cfg = NULL;
> > virCapsPtr caps = NULL;
> >
> > @@ -19266,80 +19265,17 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
> > if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
> > goto cleanup;
> >
> > - if (virttype_str &&
> > - (virttype = virDomainVirtTypeFromString(virttype_str)) < 0) {
> > - virReportError(VIR_ERR_INVALID_ARG,
> > - _("unknown virttype: %s"),
> > - virttype_str);
> > + qemuCaps = virQEMUCapsCacheLookupDefault(driver->qemuCapsCache,
> > + emulatorbin,
> > + arch_str,
> > + virttype_str,
> > + machine,
> > + &arch, &virttype, &machine);
> > + if (!qemuCaps)
> > goto cleanup;
> > - }
> >
> > - if (arch_str && (arch = virArchFromString(arch_str)) == VIR_ARCH_NONE) {
> > - virReportError(VIR_ERR_INVALID_ARG,
> > - _("unknown architecture: %s"),
> > - arch_str);
> > - goto cleanup;
> > - }
> > -
> > - if (emulatorbin) {
> > - virArch arch_from_caps;
> > -
> > - if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
> > - emulatorbin)))
> > - goto cleanup;
> > -
> > - arch_from_caps = virQEMUCapsGetArch(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;
> > - }
>
> Are all these checks necessary? Can't you get away with just checking arch_from_caps != arch?
Yes, because i686 != x86_64, while ARCH_IS_X86(i686) &&
ARCH_IS_X86(x86_64) is true.
Jirka
More information about the libvir-list
mailing list