Blob Blame History Raw
From 4058cc05cce5ed00aa9b2da4976a1a5565b9d3aa Mon Sep 17 00:00:00 2001
Message-Id: <4058cc05cce5ed00aa9b2da4976a1a5565b9d3aa@dist-git>
From: Andrea Bolognani <abologna@redhat.com>
Date: Mon, 5 Oct 2015 10:49:44 +0200
Subject: [PATCH] qemu: Add conditions for qemu-kvm use on ppc64

qemu-kvm can be used to run ppc64 guests on ppc64le hosts and vice
versa, since the hardware is actually the same and the endianness
is chosen by the guest kernel.

Up until now, however, libvirt didn't allow the use of qemu-kvm
to run guests if their endianness didn't match the host's.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1267882
(cherry picked from commit 938368f8382ca94c5156c44ad85a06cf9e4f8f8f)
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
 src/qemu/qemu_capabilities.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 5b21307..12af0dc 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -770,7 +770,7 @@ virQEMUCapsInitGuest(virCapsPtr caps,
     char *binary = NULL;
     virQEMUCapsPtr qemubinCaps = NULL;
     virQEMUCapsPtr kvmbinCaps = NULL;
-    bool native_kvm, x86_32on64_kvm, arm_32on64_kvm;
+    bool native_kvm, x86_32on64_kvm, arm_32on64_kvm, ppc64_kvm;
     int ret = -1;
 
     /* Check for existence of base emulator, or alternate base
@@ -790,14 +790,16 @@ virQEMUCapsInitGuest(virCapsPtr caps,
      *  - host & guest arches match
      *  - hostarch is x86_64 and guest arch is i686 (needs -cpu qemu32)
      *  - hostarch is aarch64 and guest arch is armv7l (needs -cpu aarch64=off)
+     *  - hostarch and guestarch are both ppc64*
      */
     native_kvm = (hostarch == guestarch);
     x86_32on64_kvm = (hostarch == VIR_ARCH_X86_64 &&
         guestarch == VIR_ARCH_I686);
     arm_32on64_kvm = (hostarch == VIR_ARCH_AARCH64 &&
         guestarch == VIR_ARCH_ARMV7L);
+    ppc64_kvm = (ARCH_IS_PPC64(hostarch) && ARCH_IS_PPC64(guestarch));
 
-    if (native_kvm || x86_32on64_kvm || arm_32on64_kvm) {
+    if (native_kvm || x86_32on64_kvm || arm_32on64_kvm || ppc64_kvm) {
         const char *kvmbins[] = {
             "/usr/libexec/qemu-kvm", /* RHEL */
             "qemu-kvm", /* Fedora */
-- 
2.6.1