[libvirt] [PATCH] qemu: Add conditions for qemu-kvm use on ppc64

Jiri Denemark jdenemar at redhat.com
Thu Oct 1 15:00:01 UTC 2015


On Thu, Oct 01, 2015 at 14:47:11 +0200, Andrea Bolognani wrote:
> 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
> ---
>  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 eb2edf5..8253398 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -768,7 +768,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
> @@ -788,14 +788,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 */

I wonder if this case shouldn't somehow fall into the hostarch ==
guestarch case, via something like
native_kvm = ARCH_CANONICAL(hostarch) == ARCH_CANONICAL(guestarch), but
probably not since it maybe non-trivial (and depending on the actual
usage) what a canonical architecture would be for every given
architecture we support.

In other words, ACK :-)

Jirka




More information about the libvir-list mailing list