Bug 1450433

Summary: Unable to create aarch64 TCG guests: "MSIX is not supported by interrupt controller"
Product: [Community] Virtualization Tools Reporter: Andrea Bolognani <abologna>
Component: libvirtAssignee: Andrea Bolognani <abologna>
Status: CLOSED NEXTRELEASE QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: unspecifiedCC: abologna, amit, berrange, cfergeau, crobinso, dwmw2, eric.auger, extras-qa, itamar, jeremy.linton, libvirt-maint, pbonzini, rbalakri, rjones, virt-maint
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-3.4.0 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 1449837 Environment:
Last Closed: 2017-05-16 15:42:51 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Andrea Bolognani 2017-05-12 14:09:22 UTC
+++ This bug was initially created as a clone of Bug #1449837 +++

Description of problem: qemu/aarch64 only supports gicv3
emulation via KVM on a aarch64 machine. This wouldn't be a
problem except that the last couple of qemu releases default
to gicv3, which means that the default machine config created
via libvirt/virt-manager fails with a message "MSIX is not
supported by interrupt controller" (older versions say) "MSI
is not supported by interrupt controller".

Version-Release number of selected component (if applicable):
qemu 2.8.11 & 2.9

How reproducible:
100%

Steps to Reproduce:
1. fedpkg install qemu libvirt virt-manager
2. virt-manager
3. new machine, arch = aarch64, type=virt
3. Install from fedora aarch64.iso
4. next a couple times, until finish.
5. Failure with above message.

Actual results:
"MSIX is not supported by interrupt controller"

Expected results:
Emulated machine starts up, and starts install fedora

Additional info:
This could be a libvirt type bug as well, because the gic
type can be overriden with `gic_version=2` to make it work
as well.

--- Additional comment from Andrea Bolognani on 2017-05-11 11:51:27 EDT ---

(In reply to Cole Robinson from comment #2)
> Andrea I think I saw some internal discussion about this but I'm light on
> details. Can you explain the plan here?

As detailed in Bug 1414081, the root of the issue is
that QEMU doesn't fully emulate GICv3, and more
specifically is missing the MSI controller which is
a requirement for virtio-pci.

There are several ways we could deal with the issue:

  1) switch back from virtio-pci to virtio-mmio, which
     works with the current GICv3;

  2) implement the missing bits of GICv3 emulation;

  3) change libvirt to always prefer GICv2 for TCG
     guests;

  4) provide a way for virt-manager users to choose
     between GICv2 and GICv3.

1) would be a massive step back, so I've included it
only for completeness' sake and strongly advise against
even considering it.

2) is something that we want to have at some point,
hence Bug 1414081, but I also have to assume it would
be a lot of work which rules it out as a short to medium
term solution.

3) is probably our best bet. We'll want to have a way
for libvirt to figure out whether QEMU supports full
GICv3 emulation so we can switch the default back to
that in the future.

4) is something that we should arguably have in any
case, same way you can already pass gic_version= to
virt-install in order to override libvirt's default.

Comment 1 Andrea Bolognani 2017-05-12 14:15:54 UTC
Implementation of proposal 3) above posted upstream.

https://www.redhat.com/archives/libvir-list/2017-May/msg00368.html

Comment 2 Andrea Bolognani 2017-05-16 15:42:51 UTC
Fix pushed upstream.

commit bc07101a7c2cd2ce07ad1ca28c47e0a7cde5625d
Author: Andrea Bolognani <abologna>
Date:   Fri May 12 13:29:57 2017 +0200

    qemu: Use GICv2 for aarch64/virt TCG guests
    
    There are currently some limitations in the emulated GICv3
    that make it unsuitable as a default. Use GICv2 instead.
    
    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1450433
    
    Signed-off-by: Andrea Bolognani <abologna>