[libvirt] Fix specifying CPU for qemu aarch64

Cole Robinson crobinso at fedoraproject.org
Fri Oct 3 13:32:51 UTC 2014


commit 0a64085f47fe0cbbdb2db47e50459831545449dc
Author: Cole Robinson <crobinso at redhat.com>
Date:   Fri Oct 3 09:32:42 2014 -0400

    Fix specifying CPU for qemu aarch64

 0001-qemu_command-Split-qemuBuildCpuArgStr.patch   |  291 +++++++++++
 ...mu-Don-t-compare-CPU-against-host-for-TCG.patch |  536 ++++++++++++++++++++
 libvirt.spec                                       |   13 +-
 3 files changed, 839 insertions(+), 1 deletions(-)
---
diff --git a/0001-qemu_command-Split-qemuBuildCpuArgStr.patch b/0001-qemu_command-Split-qemuBuildCpuArgStr.patch
new file mode 100644
index 0000000..52521f1
--- /dev/null
+++ b/0001-qemu_command-Split-qemuBuildCpuArgStr.patch
@@ -0,0 +1,291 @@
+From e543e857120b8a1b352bf34fd8a983e95ea70487 Mon Sep 17 00:00:00 2001
+From: Cole Robinson <crobinso at redhat.com>
+Date: Tue, 23 Sep 2014 11:35:57 -0400
+Subject: [PATCH] qemu_command: Split qemuBuildCpuArgStr
+
+Move the CPU mode/model handling to its own function. This is just
+code movement and re-indentation.
+
+(cherry picked from commit e1d872dc77c80d43036f928f83f560f2e9286148)
+---
+ src/qemu/qemu_command.c | 226 ++++++++++++++++++++++++++----------------------
+ 1 file changed, 122 insertions(+), 104 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 2184caa..96ba081 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6052,139 +6052,162 @@ qemuBuildClockArgStr(virDomainClockDefPtr def)
+     return NULL;
+ }
+ 
+-
+ static int
+-qemuBuildCpuArgStr(virQEMUDriverPtr driver,
+-                   const virDomainDef *def,
+-                   const char *emulator,
+-                   virQEMUCapsPtr qemuCaps,
+-                   virArch hostarch,
+-                   char **opt,
+-                   bool *hasHwVirt,
+-                   bool migrating)
++qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
++                        const virDomainDef *def,
++                        virBufferPtr buf,
++                        virQEMUCapsPtr qemuCaps,
++                        bool *hasHwVirt,
++                        bool migrating)
+ {
++    int ret = -1;
++    size_t i;
+     virCPUDefPtr host = NULL;
+     virCPUDefPtr guest = NULL;
+     virCPUDefPtr cpu = NULL;
+     size_t ncpus = 0;
+     char **cpus = NULL;
+-    const char *default_model;
+     virCPUDataPtr data = NULL;
+-    bool have_cpu = false;
+     char *compare_msg = NULL;
+-    int ret = -1;
+-    virBuffer buf = VIR_BUFFER_INITIALIZER;
+-    size_t i;
++    virCPUCompareResult cmp;
++    const char *preferred;
+     virCapsPtr caps = NULL;
+ 
+-    *hasHwVirt = false;
+-
+     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+         goto cleanup;
+ 
+     host = caps->host.cpu;
+ 
+-    if (def->os.arch == VIR_ARCH_I686)
+-        default_model = "qemu32";
+-    else
+-        default_model = "qemu64";
++    if (!host ||
++        !host->model ||
++        (ncpus = virQEMUCapsGetCPUDefinitions(qemuCaps, &cpus)) == 0) {
++        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                       _("CPU specification not supported by hypervisor"));
++        goto cleanup;
++    }
+ 
+-    if (def->cpu &&
+-        (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
+-        virCPUCompareResult cmp;
+-        const char *preferred;
++    if (!(cpu = virCPUDefCopy(def->cpu)))
++        goto cleanup;
++
++    if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
++        !migrating &&
++        cpuUpdate(cpu, host) < 0)
++        goto cleanup;
+ 
+-        if (!host ||
+-            !host->model ||
+-            (ncpus = virQEMUCapsGetCPUDefinitions(qemuCaps, &cpus)) == 0) {
++    cmp = cpuGuestData(host, cpu, &data, &compare_msg);
++    switch (cmp) {
++    case VIR_CPU_COMPARE_INCOMPATIBLE:
++        if (compare_msg) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                           _("guest and host CPU are not compatible: %s"),
++                           compare_msg);
++        } else {
+             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("CPU specification not supported by hypervisor"));
+-            goto cleanup;
++                           _("guest CPU is not compatible with host CPU"));
+         }
++        /* fall through */
++    case VIR_CPU_COMPARE_ERROR:
++        goto cleanup;
+ 
+-        if (!(cpu = virCPUDefCopy(def->cpu)))
++    default:
++        break;
++    }
++
++    /* Only 'svm' requires --enable-nesting. The nested
++     * 'vmx' patches now simply hook off the CPU features
++     */
++    if (def->os.arch == VIR_ARCH_X86_64 ||
++        def->os.arch == VIR_ARCH_I686) {
++        int hasSVM = cpuHasFeature(data, "svm");
++        if (hasSVM < 0)
+             goto cleanup;
++        *hasHwVirt = hasSVM > 0 ? true : false;
++    }
+ 
+-        if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
+-            !migrating &&
+-            cpuUpdate(cpu, host) < 0)
++    if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
++        const char *mode = virCPUModeTypeToString(cpu->mode);
++        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                           _("CPU mode '%s' is not supported by QEMU"
++                             " binary"), mode);
++            goto cleanup;
++        }
++        if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
++            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                           _("CPU mode '%s' is only supported with kvm"),
++                           mode);
++            goto cleanup;
++        }
++        virBufferAddLit(buf, "host");
++    } else {
++        if (VIR_ALLOC(guest) < 0)
++            goto cleanup;
++        if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
+             goto cleanup;
+ 
+-        cmp = cpuGuestData(host, cpu, &data, &compare_msg);
+-        switch (cmp) {
+-        case VIR_CPU_COMPARE_INCOMPATIBLE:
+-            if (compare_msg) {
+-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+-                               _("guest and host CPU are not compatible: %s"),
+-                               compare_msg);
+-            } else {
+-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                               _("guest CPU is not compatible with host CPU"));
+-            }
+-            /* fall through */
+-        case VIR_CPU_COMPARE_ERROR:
++        guest->arch = host->arch;
++        if (cpu->match == VIR_CPU_MATCH_MINIMUM)
++            preferred = host->model;
++        else
++            preferred = cpu->model;
++
++        guest->type = VIR_CPU_TYPE_GUEST;
++        guest->fallback = cpu->fallback;
++        if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
+             goto cleanup;
+ 
+-        default:
+-            break;
+-        }
++        virBufferAdd(buf, guest->model, -1);
++        if (guest->vendor_id)
++            virBufferAsprintf(buf, ",vendor=%s", guest->vendor_id);
++        for (i = 0; i < guest->nfeatures; i++) {
++            char sign;
++            if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
++                sign = '-';
++            else
++                sign = '+';
+ 
+-        /* Only 'svm' requires --enable-nesting. The nested
+-         * 'vmx' patches now simply hook off the CPU features
+-         */
+-        if (def->os.arch == VIR_ARCH_X86_64 ||
+-            def->os.arch == VIR_ARCH_I686) {
+-            int hasSVM = cpuHasFeature(data, "svm");
+-            if (hasSVM < 0)
+-                goto cleanup;
+-            *hasHwVirt = hasSVM > 0 ? true : false;
++            virBufferAsprintf(buf, ",%c%s", sign, guest->features[i].name);
+         }
++    }
+ 
+-        if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
+-            const char *mode = virCPUModeTypeToString(cpu->mode);
+-            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
+-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+-                               _("CPU mode '%s' is not supported by QEMU"
+-                                 " binary"), mode);
+-                goto cleanup;
+-            }
+-            if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
+-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+-                               _("CPU mode '%s' is only supported with kvm"),
+-                               mode);
+-                goto cleanup;
+-            }
+-            virBufferAddLit(&buf, "host");
+-        } else {
+-            if (VIR_ALLOC(guest) < 0)
+-                goto cleanup;
+-            if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
+-                goto cleanup;
++    ret = 0;
++cleanup:
++    virObjectUnref(caps);
++    VIR_FREE(compare_msg);
++    cpuDataFree(data);
++    virCPUDefFree(guest);
++    virCPUDefFree(cpu);
++    return ret;
++}
+ 
+-            guest->arch = host->arch;
+-            if (cpu->match == VIR_CPU_MATCH_MINIMUM)
+-                preferred = host->model;
+-            else
+-                preferred = cpu->model;
++static int
++qemuBuildCpuArgStr(virQEMUDriverPtr driver,
++                   const virDomainDef *def,
++                   const char *emulator,
++                   virQEMUCapsPtr qemuCaps,
++                   virArch hostarch,
++                   char **opt,
++                   bool *hasHwVirt,
++                   bool migrating)
++{
++    const char *default_model;
++    bool have_cpu = false;
++    int ret = -1;
++    virBuffer buf = VIR_BUFFER_INITIALIZER;
++    size_t i;
+ 
+-            guest->type = VIR_CPU_TYPE_GUEST;
+-            guest->fallback = cpu->fallback;
+-            if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
+-                goto cleanup;
++    *hasHwVirt = false;
+ 
+-            virBufferAdd(&buf, guest->model, -1);
+-            if (guest->vendor_id)
+-                virBufferAsprintf(&buf, ",vendor=%s", guest->vendor_id);
+-            for (i = 0; i < guest->nfeatures; i++) {
+-                char sign;
+-                if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
+-                    sign = '-';
+-                else
+-                    sign = '+';
++    if (def->os.arch == VIR_ARCH_I686)
++        default_model = "qemu32";
++    else
++        default_model = "qemu64";
+ 
+-                virBufferAsprintf(&buf, ",%c%s", sign, guest->features[i].name);
+-            }
+-        }
++    if (def->cpu &&
++        (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
++        if (qemuBuildCpuModelArgStr(driver, def, &buf, qemuCaps,
++                                    hasHwVirt, migrating) < 0)
++            goto cleanup;
+         have_cpu = true;
+     } else {
+         /*
+@@ -6309,11 +6332,6 @@ qemuBuildCpuArgStr(virQEMUDriverPtr driver,
+     ret = 0;
+ 
+  cleanup:
+-    VIR_FREE(compare_msg);
+-    cpuDataFree(data);
+-    virCPUDefFree(guest);
+-    virCPUDefFree(cpu);
+-    virObjectUnref(caps);
+     return ret;
+ }
+ 
diff --git a/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch b/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
new file mode 100644
index 0000000..8bc4548
--- /dev/null
+++ b/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
@@ -0,0 +1,536 @@
+From fe13df3feab361cd7596e67af87ad1ca2c4158c5 Mon Sep 17 00:00:00 2001
+From: Cole Robinson <crobinso at redhat.com>
+Date: Tue, 23 Sep 2014 13:07:09 -0400
+Subject: [PATCH] qemu: Don't compare CPU against host for TCG
+
+Right now when building the qemu command line, we try to do various
+unconditional validations of the guest CPU against the host CPU. However
+this checks are overly applied. The only time we should use the checks
+are:
+
+- The user requests host-model/host-passthrough, or
+
+- When KVM is requsted. CPU features requested in TCG mode are always
+  emulated by qemu and are independent of the host CPU, so no host CPU
+  checks should be performed.
+
+Right now if trying to specify a CPU for arm on an x86 host, it attempts
+to do non-sensical validation and falls over.
+
+Switch all the test cases that were intending to test CPU validation to
+use KVM, so they continue to test the intended code.
+
+Amend some aarch64 XML tests with a CPU model, to ensure things work
+correctly.
+
+(cherry picked from commit cf7fce8f2fd1c930f357fd4ff93ac35f38eb30c6)
+---
+ src/qemu/qemu_command.c                            | 68 +++++++++++++---------
+ .../qemuxml2argv-aarch64-virt-default-nic.args     |  3 +-
+ .../qemuxml2argv-aarch64-virt-default-nic.xml      |  3 +
+ .../qemuxml2argv-aarch64-virt-virtio.args          |  3 +-
+ .../qemuxml2argv-aarch64-virt-virtio.xml           |  3 +
+ .../qemuxml2argvdata/qemuxml2argv-cpu-exact1.args  |  2 +-
+ tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml |  4 +-
+ .../qemuxml2argv-cpu-exact2-nofallback.args        |  2 +-
+ .../qemuxml2argv-cpu-exact2-nofallback.xml         |  4 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-exact2.args  |  2 +-
+ tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml |  4 +-
+ .../qemuxml2argv-cpu-fallback.args                 |  2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml |  4 +-
+ .../qemuxml2argv-cpu-minimum1.args                 |  2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml |  4 +-
+ .../qemuxml2argv-cpu-minimum2.args                 |  2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml |  4 +-
+ .../qemuxml2argv-cpu-nofallback.xml                |  2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-strict1.args |  2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml  |  4 +-
+ .../qemuxml2argv-graphics-spice-timeout.args       |  2 +-
+ .../qemuxml2argv-graphics-spice-timeout.xml        |  4 +-
+ .../qemuxml2argv-pseries-cpu-exact.args            |  4 +-
+ tests/qemuxml2argvtest.c                           | 21 +++----
+ .../qemuxml2xmlout-graphics-spice-timeout.xml      |  4 +-
+ 25 files changed, 90 insertions(+), 69 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 96ba081..a3bcab9 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6072,6 +6072,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+     virCPUCompareResult cmp;
+     const char *preferred;
+     virCapsPtr caps = NULL;
++    bool compareAgainstHost = (def->virtType == VIR_DOMAIN_VIRT_KVM ||
++        def->cpu->mode != VIR_CPU_MODE_CUSTOM);
+ 
+     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+         goto cleanup;
+@@ -6094,30 +6096,33 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+         cpuUpdate(cpu, host) < 0)
+         goto cleanup;
+ 
+-    cmp = cpuGuestData(host, cpu, &data, &compare_msg);
+-    switch (cmp) {
+-    case VIR_CPU_COMPARE_INCOMPATIBLE:
+-        if (compare_msg) {
+-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+-                           _("guest and host CPU are not compatible: %s"),
+-                           compare_msg);
+-        } else {
+-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+-                           _("guest CPU is not compatible with host CPU"));
+-        }
+-        /* fall through */
+-    case VIR_CPU_COMPARE_ERROR:
+-        goto cleanup;
++    /* For non-KVM, CPU features are emulated, so host compat doesn't matter */
++    if (compareAgainstHost) {
++        cmp = cpuGuestData(host, cpu, &data, &compare_msg);
++        switch (cmp) {
++        case VIR_CPU_COMPARE_INCOMPATIBLE:
++            if (compare_msg) {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++                               _("guest and host CPU are not compatible: %s"),
++                               compare_msg);
++            } else {
++                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++                               _("guest CPU is not compatible with host CPU"));
++            }
++            /* fall through */
++        case VIR_CPU_COMPARE_ERROR:
++            goto cleanup;
+ 
+-    default:
+-        break;
++        default:
++            break;
++        }
+     }
+ 
+     /* Only 'svm' requires --enable-nesting. The nested
+      * 'vmx' patches now simply hook off the CPU features
+      */
+-    if (def->os.arch == VIR_ARCH_X86_64 ||
+-        def->os.arch == VIR_ARCH_I686) {
++    if ((def->os.arch == VIR_ARCH_X86_64 || def->os.arch == VIR_ARCH_I686) &&
++         compareAgainstHost) {
+         int hasSVM = cpuHasFeature(data, "svm");
+         if (hasSVM < 0)
+             goto cleanup;
+@@ -6145,16 +6150,23 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+         if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
+             goto cleanup;
+ 
+-        guest->arch = host->arch;
+-        if (cpu->match == VIR_CPU_MATCH_MINIMUM)
+-            preferred = host->model;
+-        else
+-            preferred = cpu->model;
++        if (compareAgainstHost) {
++            guest->arch = host->arch;
++            if (cpu->match == VIR_CPU_MATCH_MINIMUM)
++                preferred = host->model;
++            else
++                preferred = cpu->model;
+ 
+-        guest->type = VIR_CPU_TYPE_GUEST;
+-        guest->fallback = cpu->fallback;
+-        if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
+-            goto cleanup;
++            guest->type = VIR_CPU_TYPE_GUEST;
++            guest->fallback = cpu->fallback;
++            if (cpuDecode(guest, data,
++                          (const char **)cpus, ncpus, preferred) < 0)
++                goto cleanup;
++        } else {
++            guest->arch = def->os.arch;
++            if (VIR_STRDUP(guest->model, cpu->model) < 0)
++                goto cleanup;
++        }
+ 
+         virBufferAdd(buf, guest->model, -1);
+         if (guest->vendor_id)
+@@ -6171,7 +6183,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+     }
+ 
+     ret = 0;
+-cleanup:
++ cleanup:
+     virObjectUnref(caps);
+     VIR_FREE(compare_msg);
+     cpuDataFree(data);
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
+index d4d403b..8cb57c5 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
+@@ -1,5 +1,6 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \
++/usr/bin/qemu-system-aarch64 -S -M virt -cpu cortex-a53 \
++-m 1024 -smp 1 -nographic \
+ -nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+ -boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append console=ttyAMA0 \
+ -usb -device virtio-net-device,vlan=0,id=net0,mac=52:54:00:09:a4:37 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
+index 868de94..3a6f098 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
+@@ -7,6 +7,9 @@
+   <features>
+     <acpi/>
+   </features>
++  <cpu match='exact'>
++    <model>cortex-a53</model>
++  </cpu>
+   <os>
+     <type arch="aarch64" machine="virt">hvm</type>
+     <kernel>/aarch64.kernel</kernel>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
+index afd6e41..05f3629 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
+@@ -1,5 +1,6 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \
++/usr/bin/qemu-system-aarch64 -S -M virt -cpu cortex-a53 \
++-m 1024 -smp 1 -nographic \
+ -nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+ -boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append \
+ 'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
+index 184b62c..ad34615 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
+@@ -16,6 +16,9 @@
+     <apic/>
+     <pae/>
+   </features>
++  <cpu match='exact'>
++    <model>cortex-a53</model>
++  </cpu>
+   <clock offset="utc"/>
+   <on_poweroff>destroy</on_poweroff>
+   <on_reboot>restart</on_reboot>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
+index 76c2c48..0a58616 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu qemu64,-svm,-lm,-nx,-syscall,-clflush,-pse36,-mca -m 214 -smp 6 \
+ -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
+ none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
+index ddd9d5a..1d1e815 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -23,6 +23,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
+index 0e37379..e46527b 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+ds_cpl,+tm,+ht,+ds,-nx -m 214 -smp 6 \
+ -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
+ none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
+index de4c8d2..6b9b7d4 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -30,6 +30,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
+index 0e37379..e46527b 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+ds_cpl,+tm,+ht,+ds,-nx -m 214 -smp 6 \
+ -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
+ none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
+index e027e6f..eaea564 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -30,6 +30,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
+index 4ee8391..ead561f 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
+@@ -3,7 +3,7 @@ PATH=/bin \
+ HOME=/home/test \
+ USER=test \
+ LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu \
++/usr/bin/qemu-kvm \
+ -S \
+ -M pc \
+ -cpu Penryn,-sse4.1 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
+index 6125f41..85642e9 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -20,6 +20,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
+index 0630ef4..d8207e7 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,\
+ +acpi,+ds -m 214 -smp 6 -nographic -monitor unix:/tmp/test-monitor,server,\
+ nowait -no-acpi -boot n -usb -net none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
+index 4ba5d0b..5879d35 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -16,6 +16,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
+index 830994f..17ba256 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,\
+ +acpi,+ds,-lm,-nx,-syscall -m 214 -smp 6 -nographic -monitor \
+ unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net none -serial none \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
+index c43bf4f..b8bbf25 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -20,6 +20,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
+index 4ae0be8..abb0e9c 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
+index 8b545a7..c500ef7 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+est,+vmx,+ds_cpl,+tm,+ht,+acpi,+ds,-nx \
+ -m 214 -smp 6 -nographic -monitor unix:/tmp/test-monitor,server,nowait \
+ -no-acpi -boot n -usb -net none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
+index 935f46f..a9fc9c5 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>QEMUGuest1</name>
+   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+   <memory unit='KiB'>219100</memory>
+@@ -33,6 +33,6 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>destroy</on_crash>
+   <devices>
+-      <emulator>/usr/bin/qemu</emulator>
++      <emulator>/usr/bin/qemu-kvm</emulator>
+   </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
+index 48744b2..8b5d9ee 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \
+-/usr/bin/qemu -S -M pc -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,\
++/usr/bin/qemu-kvm -S -M pc -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,\
+ +est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,+acpi,+ds \
+ -m 1024 -smp 2 -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+ -boot dc -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
+index e6ecbed..3ed864c 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>f14</name>
+   <uuid>553effab-b5e1-2d80-dfe3-da4344826c43</uuid>
+   <memory unit='KiB'>1048576</memory>
+@@ -38,7 +38,7 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>restart</on_crash>
+   <devices>
+-    <emulator>/usr/bin/qemu</emulator>
++    <emulator>/usr/bin/qemu-kvm</emulator>
+     <disk type='file' device='disk'>
+       <driver name='qemu' type='qcow2'/>
+       <source file='/var/lib/libvirt/images/f14.img'/>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
+index 1e09680..9927294 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
+@@ -1,6 +1,6 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
+-/usr/bin/qemu-system-ppc64 -S -M pseries -cpu POWER7_v2.3 -m 512 -smp 1 -nographic \
+--nodefconfig -nodefaults \
++QEMU_AUDIO_DRV=none /usr/bin/qemu-system-ppc64 -S -M pseries -cpu POWER7_v2.3 \
++-m 512 -smp 1 -nographic -nodefconfig -nodefaults \
+ -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+ -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb \
+ -chardev pty,id=charserial0 \
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 3feb2fe..e649aa5 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -920,7 +920,7 @@ mymain(void)
+             QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
+             QEMU_CAPS_DEVICE_QXL);
+     DO_TEST("graphics-spice-timeout",
+-            QEMU_CAPS_DRIVE,
++            QEMU_CAPS_KVM, QEMU_CAPS_DRIVE,
+             QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
+             QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
+             QEMU_CAPS_DEVICE_QXL_VGA);
+@@ -1192,14 +1192,14 @@ mymain(void)
+     DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY);
+     DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY);
+     DO_TEST("cpu-topology3", NONE);
+-    DO_TEST("cpu-minimum1", NONE);
+-    DO_TEST("cpu-minimum2", NONE);
+-    DO_TEST("cpu-exact1", NONE);
+-    DO_TEST("cpu-exact2", NONE);
+-    DO_TEST("cpu-exact2-nofallback", NONE);
+-    DO_TEST("cpu-fallback", NONE);
+-    DO_TEST_FAILURE("cpu-nofallback", NONE);
+-    DO_TEST("cpu-strict1", NONE);
++    DO_TEST("cpu-minimum1", QEMU_CAPS_KVM);
++    DO_TEST("cpu-minimum2", QEMU_CAPS_KVM);
++    DO_TEST("cpu-exact1", QEMU_CAPS_KVM);
++    DO_TEST("cpu-exact2", QEMU_CAPS_KVM);
++    DO_TEST("cpu-exact2-nofallback", QEMU_CAPS_KVM);
++    DO_TEST("cpu-fallback", QEMU_CAPS_KVM);
++    DO_TEST_FAILURE("cpu-nofallback", QEMU_CAPS_KVM);
++    DO_TEST("cpu-strict1", QEMU_CAPS_KVM);
+     DO_TEST("cpu-numa1", NONE);
+     DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
+     DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
+@@ -1284,7 +1284,8 @@ mymain(void)
+     DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
+             QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
+             QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+-    DO_TEST_FAILURE("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
++    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
++            QEMU_CAPS_NODEFCONFIG);
+     DO_TEST("disk-ide-drive-split",
+             QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+             QEMU_CAPS_IDE_CD);
+diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
+index 44c4cf7..73ebcab 100644
+--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+   <name>f14</name>
+   <uuid>553effab-b5e1-2d80-dfe3-da4344826c43</uuid>
+   <memory unit='KiB'>1048576</memory>
+@@ -38,7 +38,7 @@
+   <on_reboot>restart</on_reboot>
+   <on_crash>restart</on_crash>
+   <devices>
+-    <emulator>/usr/bin/qemu</emulator>
++    <emulator>/usr/bin/qemu-kvm</emulator>
+     <disk type='file' device='disk'>
+       <driver name='qemu' type='qcow2'/>
+       <source file='/var/lib/libvirt/images/f14.img'/>
diff --git a/libvirt.spec b/libvirt.spec
index 7acf617..492466b 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -363,7 +363,7 @@
 Summary: Library providing a simple virtualization API
 Name: libvirt
 Version: 1.2.9
-Release: 1%{?dist}%{?extra_release}
+Release: 2%{?dist}%{?extra_release}
 License: LGPLv2+
 Group: Development/Libraries
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
@@ -374,6 +374,10 @@ URL: http://libvirt.org/
 %endif
 Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
 
+# Fix specifying CPU for qemu aarch64
+Patch0001: 0001-qemu_command-Split-qemuBuildCpuArgStr.patch
+Patch0002: 0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
+
 %if %{with_libvirtd}
 Requires: libvirt-daemon = %{version}-%{release}
     %if %{with_network}
@@ -1198,6 +1202,10 @@ driver
 %prep
 %setup -q
 
+# Fix specifying CPU for qemu aarch64
+%patch0001 -p1
+%patch0002 -p1
+
 %build
 %if ! %{with_xen}
     %define _without_xen --without-xen
@@ -2274,6 +2282,9 @@ exit 0
 %doc examples/systemtap
 
 %changelog
+* Fri Oct 03 2014 Cole Robinson <crobinso at redhat.com> - 1.2.9-2
+- Fix specifying CPU for qemu aarch64
+
 * Wed Sep 24 2014 Cole Robinson <crobinso at redhat.com> - 1.2.8-6
 - Fix labelling host devices (bz #1145968)
 


More information about the scm-commits mailing list