7a3408
From 4058cc05cce5ed00aa9b2da4976a1a5565b9d3aa Mon Sep 17 00:00:00 2001
7a3408
Message-Id: <4058cc05cce5ed00aa9b2da4976a1a5565b9d3aa@dist-git>
7a3408
From: Andrea Bolognani <abologna@redhat.com>
7a3408
Date: Mon, 5 Oct 2015 10:49:44 +0200
7a3408
Subject: [PATCH] qemu: Add conditions for qemu-kvm use on ppc64
7a3408
7a3408
qemu-kvm can be used to run ppc64 guests on ppc64le hosts and vice
7a3408
versa, since the hardware is actually the same and the endianness
7a3408
is chosen by the guest kernel.
7a3408
7a3408
Up until now, however, libvirt didn't allow the use of qemu-kvm
7a3408
to run guests if their endianness didn't match the host's.
7a3408
7a3408
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1267882
7a3408
(cherry picked from commit 938368f8382ca94c5156c44ad85a06cf9e4f8f8f)
7a3408
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
7a3408
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7a3408
---
7a3408
 src/qemu/qemu_capabilities.c | 6 ++++--
7a3408
 1 file changed, 4 insertions(+), 2 deletions(-)
7a3408
7a3408
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
7a3408
index 5b21307..12af0dc 100644
7a3408
--- a/src/qemu/qemu_capabilities.c
7a3408
+++ b/src/qemu/qemu_capabilities.c
7a3408
@@ -770,7 +770,7 @@ virQEMUCapsInitGuest(virCapsPtr caps,
7a3408
     char *binary = NULL;
7a3408
     virQEMUCapsPtr qemubinCaps = NULL;
7a3408
     virQEMUCapsPtr kvmbinCaps = NULL;
7a3408
-    bool native_kvm, x86_32on64_kvm, arm_32on64_kvm;
7a3408
+    bool native_kvm, x86_32on64_kvm, arm_32on64_kvm, ppc64_kvm;
7a3408
     int ret = -1;
7a3408
 
7a3408
     /* Check for existence of base emulator, or alternate base
7a3408
@@ -790,14 +790,16 @@ virQEMUCapsInitGuest(virCapsPtr caps,
7a3408
      *  - host & guest arches match
7a3408
      *  - hostarch is x86_64 and guest arch is i686 (needs -cpu qemu32)
7a3408
      *  - hostarch is aarch64 and guest arch is armv7l (needs -cpu aarch64=off)
7a3408
+     *  - hostarch and guestarch are both ppc64*
7a3408
      */
7a3408
     native_kvm = (hostarch == guestarch);
7a3408
     x86_32on64_kvm = (hostarch == VIR_ARCH_X86_64 &&
7a3408
         guestarch == VIR_ARCH_I686);
7a3408
     arm_32on64_kvm = (hostarch == VIR_ARCH_AARCH64 &&
7a3408
         guestarch == VIR_ARCH_ARMV7L);
7a3408
+    ppc64_kvm = (ARCH_IS_PPC64(hostarch) && ARCH_IS_PPC64(guestarch));
7a3408
 
7a3408
-    if (native_kvm || x86_32on64_kvm || arm_32on64_kvm) {
7a3408
+    if (native_kvm || x86_32on64_kvm || arm_32on64_kvm || ppc64_kvm) {
7a3408
         const char *kvmbins[] = {
7a3408
             "/usr/libexec/qemu-kvm", /* RHEL */
7a3408
             "qemu-kvm", /* Fedora */
7a3408
-- 
7a3408
2.6.1
7a3408