rjones pushed to libvirt (master). "Add Cole Robinson's patch to fix arch selection (bz# 1219198, bz#1219191)"
notifications at fedoraproject.org
notifications at fedoraproject.org
Thu May 7 14:10:00 UTC 2015
From e4b5ba1a9d89082692b47408c17163a47b687b97 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones at redhat.com>
Date: Thu, 7 May 2015 15:08:12 +0100
Subject: Add Cole Robinson's patch to fix arch selection (bz# 1219198,
bz#1219191)
diff --git a/0001-caps-Don-t-default-to-i686-of-KVM-on-x86_64.patch b/0001-caps-Don-t-default-to-i686-of-KVM-on-x86_64.patch
new file mode 100644
index 0000000..379440e
--- /dev/null
+++ b/0001-caps-Don-t-default-to-i686-of-KVM-on-x86_64.patch
@@ -0,0 +1,225 @@
+From 31479ae566d887ce4b864ef84fee99305041aaf1 Mon Sep 17 00:00:00 2001
+From: Cole Robinson <crobinso at redhat.com>
+Date: Wed, 6 May 2015 18:59:46 -0400
+Subject: [PATCH] caps: Don't default to i686 of KVM on x86_64
+
+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
+(cherry picked from commit 67b3c04b139d697e4aab01c0f676e356bbef5c52)
+---
+ src/conf/capabilities.c | 63 +++++++++++++++-------
+ .../qemuxml2argv-default-kvm-host-arch.args | 4 ++
+ .../qemuxml2argv-default-kvm-host-arch.xml | 11 ++++
+ tests/qemuxml2argvtest.c | 1 +
+ .../qemuxml2xmlout-default-kvm-host-arch.xml | 21 ++++++++
+ tests/qemuxml2xmltest.c | 1 +
+ tests/testutilsqemu.c | 12 +++++
+ 7 files changed, 94 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/qemuxml2xmloutdata/qemuxml2xmlout-default-kvm-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/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 4acaa11..df4c9f5 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -595,6 +595,7 @@ 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("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/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
+index b611afd..a21a299 100644
+--- a/tests/qemuxml2xmltest.c
++++ b/tests/qemuxml2xmltest.c
+@@ -346,6 +346,7 @@ mymain(void)
+ DO_TEST("minimal");
+ DO_TEST("machine-core-on");
+ DO_TEST("machine-core-off");
++ DO_TEST_DIFFERENT("default-kvm-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;
+
+--
+2.3.1
+
diff --git a/libvirt.spec b/libvirt.spec
index 463bf24..a535dd5 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -378,7 +378,7 @@
Summary: Library providing a simple virtualization API
Name: libvirt
Version: 1.2.15
-Release: 1%{?dist}%{?extra_release}
+Release: 2%{?dist}%{?extra_release}
License: LGPLv2+
Group: Development/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
@@ -389,6 +389,8 @@ URL: http://libvirt.org/
%endif
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
+Patch1: 0001-caps-Don-t-default-to-i686-of-KVM-on-x86_64.patch
+
%if %{with_libvirtd}
Requires: libvirt-daemon = %{version}-%{release}
%if %{with_network}
@@ -2305,6 +2307,9 @@ exit 0
%doc examples/systemtap
%changelog
+* Thu May 07 2015 Richard W.M. Jones <rjones at redhat.com> - 1.2.15-2
+- Add Cole Robinson's patch to fix arch selection (bz# 1219198, bz#1219191)
+
* Mon May 04 2015 Cole Robinson <crobinso at redhat.com> - 1.2.15-1
- Rebased to version 1.2.15
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/libvirt.git/commit/?h=master&id=e4b5ba1a9d89082692b47408c17163a47b687b97
More information about the scm-commits
mailing list