[libvirt] ARMv7 guest PCI support broken in 3.0.0 onwards

Andrea Bolognani abologna at redhat.com
Mon Feb 20 09:16:47 UTC 2017


On Sun, 2017-02-19 at 18:54 +0100, Auger Eric wrote:
> > > We should find a way to detect whether the interrupt
> > > controller will support PCIe, and fall back to using
> > > virtio-mmio when it doesn't. Eric, any ideas about how we
> > > could achieve that?
>> > Actually, we will probably want to do the opposite, eg. pick
> > GICv2 over GICv3 if the latter doesn't allow us to use PCIe.
> 
> Yes I think the easiest solution is to select the GICv2 + v2m combo to

Not sure how the "combo" part works... I noticed that, if
I start a guest with

  -machine virt,gic-version=3

I only get one GIC-related device:

  dev: arm-gicv3, id ""
    gpio-out "sysbus-irq" 4
    gpio-in "" 288
    num-cpu = 1 (0x1)
    num-irq = 288 (0x120)
    revision = 3 (0x3)
    has-security-extensions = false
    mmio 0000000008000000/0000000000010000
    mmio 00000000080a0000/0000000000020000

However, if I use gic-version=2, I get:

  dev: arm-gicv2m, id ""
    gpio-out "sysbus-irq" 64
    base-spi = 48 (0x30)
    num-spi = 64 (0x40)
    mmio 0000000008020000/0000000000001000
  dev: arm_gic, id ""
    gpio-out "sysbus-irq" 4
    gpio-in "" 288
    num-cpu = 1 (0x1)
    num-irq = 288 (0x120)
    revision = 2 (0x2)
    has-security-extensions = false
    mmio 0000000008000000/0000000000001000
    mmio 0000000008010000/0000000000002000
    mmio ffffffffffffffff/0000000000000100

Is that what you're referring to? Do we need to care about
the fact that it's two devices rather than one?

> get the MSI support. This depends on whether the limitations linked to
> GICv2 usage are acceptable in your case (max 8 cpus for instance).

I think the advantages of using virtio-pci instead of
virtio-mmio offset the limitations of GICv2, at least in
the default case. Aside from not being able to have more
than 8 vCPUs, what other limitations are we looking at?

Anyway, my question was really: how can we tell whether
a certain gic-version will support PCIe? Is there a way
to ask QEMU for the information, or would we have to
hardcode this knowledge in libvirt?

The latter sounds like it would backfire quite easily,
as I assume the emulated GICv3 not having PCIe support
is only a matter of the relevant code not having been
implemented *yet*, not something that's always going
to be true.

-- 
Andrea Bolognani / Red Hat / Virtualization




More information about the libvir-list mailing list