[Pkg-libvirt-commits] [libvirt] 02/03: caps: Fix regression defaulting to host arch

Guido Guenther agx at moszumanska.debian.org
Fri May 8 16:58:04 UTC 2015


This is an automated email from the git hooks/post-receive script.

agx pushed a commit to annotated tag debian/1.2.15-2
in repository libvirt.

commit 57a9e63f30077f2c789f83b440ad1a393703cdde
Author: Guido Günther <agx at sigxcpu.org>
Date:   Fri May 8 18:25:54 2015 +0200

    caps: Fix regression defaulting to host arch
---
 ...ps-Fix-regression-defaulting-to-host-arch.patch | 282 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 2 files changed, 283 insertions(+)

diff --git a/debian/patches/fromupstream/caps-Fix-regression-defaulting-to-host-arch.patch b/debian/patches/fromupstream/caps-Fix-regression-defaulting-to-host-arch.patch
new file mode 100644
index 0000000..0690a9a
--- /dev/null
+++ b/debian/patches/fromupstream/caps-Fix-regression-defaulting-to-host-arch.patch
@@ -0,0 +1,282 @@
+From: Cole Robinson <crobinso at redhat.com>
+Date: Wed, 6 May 2015 18:32:05 -0400
+Subject: caps: Fix regression defaulting to host arch
+
+My commit 747761a79 (v1.2.15 only) dropped this bit of logic when filling
+in a default arch in the XML:
+
+-    /* First try to find one matching host arch */
+-    for (i = 0; i < caps->nguests; i++) {
+-        if (caps->guests[i]->ostype == ostype) {
+-            for (j = 0; j < caps->guests[i]->arch.ndomains; j++) {
+-                if (caps->guests[i]->arch.domains[j]->type == domain &&
+-                    caps->guests[i]->arch.id == caps->host.arch)
+-                    return caps->guests[i]->arch.id;
+-            }
+-        }
+-    }
+
+That attempt to match host.arch is important, otherwise we end up
+defaulting to i686 on x86_64 host for KVM, which is not intended.
+Duplicate it in the centralized CapsLookup function.
+
+Additionally add some testcases that would have caught this.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1219191
+---
+ src/conf/capabilities.c                            | 63 +++++++++++++++-------
+ .../qemuxml2argv-default-kvm-host-arch.args        |  4 ++
+ .../qemuxml2argv-default-kvm-host-arch.xml         | 11 ++++
+ .../qemuxml2argv-default-qemu-host-arch.args       |  4 ++
+ .../qemuxml2argv-default-qemu-host-arch.xml        | 11 ++++
+ tests/qemuxml2argvtest.c                           |  2 +
+ .../qemuxml2xmlout-default-kvm-host-arch.xml       | 21 ++++++++
+ .../qemuxml2xmlout-default-qemu-host-arch.xml      | 21 ++++++++
+ tests/qemuxml2xmltest.c                            |  2 +
+ tests/testutilsqemu.c                              | 12 +++++
+ 10 files changed, 132 insertions(+), 19 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.xml
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.xml
+ create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-default-kvm-host-arch.xml
+ create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-default-qemu-host-arch.xml
+
+diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
+index 922741f..c43bfb3 100644
+--- a/src/conf/capabilities.c
++++ b/src/conf/capabilities.c
+@@ -607,25 +607,13 @@ virCapsDomainDataCompare(virCapsGuestPtr guest,
+     return true;
+ }
+ 
+-/**
+- * virCapabilitiesDomainDataLookup:
+- * @caps: capabilities to query
+- * @ostype: guest operating system type, of enum VIR_DOMAIN_OSTYPE
+- * @arch: Architecture to search for
+- * @domaintype: domain type to search for, of enum VIR_DOMAIN_VIRT
+- * @emulator: Emulator path to search for
+- * @machinetype: Machine type to search for
+- *
+- * Search capabilities for the passed values, and if found return
+- * virCapabilitiesDomainDataLookup filled in with the default values
+- */
+-virCapsDomainDataPtr
+-virCapabilitiesDomainDataLookup(virCapsPtr caps,
+-                                int ostype,
+-                                virArch arch,
+-                                int domaintype,
+-                                const char *emulator,
+-                                const char *machinetype)
++static virCapsDomainDataPtr
++virCapabilitiesDomainDataLookupInternal(virCapsPtr caps,
++                                        int ostype,
++                                        virArch arch,
++                                        int domaintype,
++                                        const char *emulator,
++                                        const char *machinetype)
+ {
+     virCapsGuestPtr foundguest = NULL;
+     virCapsGuestDomainPtr founddomain = NULL;
+@@ -730,6 +718,43 @@ virCapabilitiesDomainDataLookup(virCapsPtr caps,
+     return ret;
+ }
+ 
++/**
++ * virCapabilitiesDomainDataLookup:
++ * @caps: capabilities to query
++ * @ostype: guest operating system type, of enum VIR_DOMAIN_OSTYPE
++ * @arch: Architecture to search for
++ * @domaintype: domain type to search for, of enum VIR_DOMAIN_VIRT
++ * @emulator: Emulator path to search for
++ * @machinetype: Machine type to search for
++ *
++ * Search capabilities for the passed values, and if found return
++ * virCapabilitiesDomainDataLookup filled in with the default values
++ */
++virCapsDomainDataPtr
++virCapabilitiesDomainDataLookup(virCapsPtr caps,
++                                int ostype,
++                                virArch arch,
++                                int domaintype,
++                                const char *emulator,
++                                const char *machinetype)
++{
++    virCapsDomainDataPtr ret;
++
++    if (arch == VIR_ARCH_NONE) {
++        /* Prefer host arch if its available */
++        ret = virCapabilitiesDomainDataLookupInternal(caps, ostype,
++                                                      caps->host.arch,
++                                                      domaintype,
++                                                      emulator, machinetype);
++        if (ret)
++            return ret;
++    }
++
++    return virCapabilitiesDomainDataLookupInternal(caps, ostype,
++                                                   arch, domaintype,
++                                                   emulator, machinetype);
++}
++
+ static int
+ virCapabilitiesFormatNUMATopology(virBufferPtr buf,
+                                   size_t ncells,
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args b/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args
+new file mode 100644
+index 0000000..102691f
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.args
+@@ -0,0 +1,4 @@
++LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
++/usr/bin/kvm -S -machine pc,accel=kvm -m 4096 -smp 4 -nographic \
++-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -net none \
++-serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.xml b/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.xml
+new file mode 100644
+index 0000000..66dead0
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-default-kvm-host-arch.xml
+@@ -0,0 +1,11 @@
++<domain type='kvm'>
++  <name>kvm</name>
++  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
++  <memory unit='KiB'>4194304</memory>
++  <currentMemory unit='KiB'>4194304</currentMemory>
++  <vcpu placement='static'>4</vcpu>
++  <os>
++    <type>hvm</type>
++    <boot dev='hd'/>
++  </os>
++</domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args b/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args
+new file mode 100644
+index 0000000..5bd404c
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.args
+@@ -0,0 +1,4 @@
++LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
++/usr/bin/qemu-system-x86_64 -S -machine pc-0.11,accel=tcg -m 4096 -smp 4 \
++-nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \
++-usb -net none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.xml b/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.xml
+new file mode 100644
+index 0000000..85ddec5
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-default-qemu-host-arch.xml
+@@ -0,0 +1,11 @@
++<domain type='qemu'>
++  <name>qemu-host</name>
++  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
++  <memory unit='KiB'>4194304</memory>
++  <currentMemory unit='KiB'>4194304</currentMemory>
++  <vcpu placement='static'>4</vcpu>
++  <os>
++    <type>hvm</type>
++    <boot dev='hd'/>
++  </os>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 4acaa11..bcb2678 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -595,6 +595,8 @@ mymain(void)
+     DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
+             QEMU_CAPS_MACHINE_USB_OPT);
+     DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
++    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
++    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
+     DO_TEST("boot-cdrom", NONE);
+     DO_TEST("boot-network", NONE);
+     DO_TEST("boot-floppy", NONE);
+diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-default-kvm-host-arch.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-default-kvm-host-arch.xml
+new file mode 100644
+index 0000000..30fa66d
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-default-kvm-host-arch.xml
+@@ -0,0 +1,21 @@
++<domain type='kvm'>
++  <name>kvm</name>
++  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
++  <memory unit='KiB'>4194304</memory>
++  <currentMemory unit='KiB'>4194304</currentMemory>
++  <vcpu placement='static'>4</vcpu>
++  <os>
++    <type arch='x86_64' machine='pc'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/kvm</emulator>
++    <controller type='usb' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <memballoon model='virtio'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-default-qemu-host-arch.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-default-qemu-host-arch.xml
+new file mode 100644
+index 0000000..3e65b97
+--- /dev/null
++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-default-qemu-host-arch.xml
+@@ -0,0 +1,21 @@
++<domain type='qemu'>
++  <name>qemu-host</name>
++  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
++  <memory unit='KiB'>4194304</memory>
++  <currentMemory unit='KiB'>4194304</currentMemory>
++  <vcpu placement='static'>4</vcpu>
++  <os>
++    <type arch='x86_64' machine='pc-0.11'>hvm</type>
++    <boot dev='hd'/>
++  </os>
++  <clock offset='utc'/>
++  <on_poweroff>destroy</on_poweroff>
++  <on_reboot>restart</on_reboot>
++  <on_crash>destroy</on_crash>
++  <devices>
++    <emulator>/usr/bin/qemu-system-x86_64</emulator>
++    <controller type='usb' index='0'/>
++    <controller type='pci' index='0' model='pci-root'/>
++    <memballoon model='virtio'/>
++  </devices>
++</domain>
+diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index b611afd..99f402c 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -346,6 +346,8 @@ mymain(void)
+     DO_TEST("minimal");
+     DO_TEST("machine-core-on");
+     DO_TEST("machine-core-off");
++    DO_TEST_DIFFERENT("default-kvm-host-arch");
++    DO_TEST_DIFFERENT("default-qemu-host-arch");
+     DO_TEST("boot-cdrom");
+     DO_TEST("boot-network");
+     DO_TEST("boot-floppy");
+diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
+index 14743be..d067bca 100644
+--- a/tests/testutilsqemu.c
++++ b/tests/testutilsqemu.c
+@@ -354,6 +354,18 @@ virCapsPtr testQemuCapsInit(void)
+                                       NULL) == NULL)
+         goto cleanup;
+ 
++    if ((machines = testQemuAllocMachines(&nmachines)) == NULL)
++        goto cleanup;
++
++    if (virCapabilitiesAddGuestDomain(guest,
++                                      VIR_DOMAIN_VIRT_KVM,
++                                      "/usr/bin/qemu-kvm",
++                                      NULL,
++                                      nmachines,
++                                      machines) == NULL)
++        goto cleanup;
++    machines = NULL;
++
+     if ((machines = testQemuAllocNewerMachines(&nmachines)) == NULL)
+         goto cleanup;
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 86e77c7..0d119c8 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -11,3 +11,4 @@ debian/Debianize-systemd-service-files.patch
 Allow-xen-toolstack-to-find-it-s-binaries.patch
 Skip-vircgrouptest.patch
 debian/Debianize-virtlockd.patch
+fromupstream/caps-Fix-regression-defaulting-to-host-arch.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libvirt.git



More information about the Pkg-libvirt-commits mailing list