[libvirt] [PATCH v5 2/4] qemu: Add PCI-Express root to ARM virt machine

Martin Kletzander mkletzan at redhat.com
Thu Aug 6 16:37:41 UTC 2015


On Fri, Jul 17, 2015 at 02:27:45PM +0300, Pavel Fedin wrote:
>Here we assume that if qemu supports generic PCI host controller,
>it is a part of virt machine and can be used for adding PCI devices.
>
>In qemu this is actually a PCIe bus, so we also declare multibus
>capability so that 0'th bus is specified to qemu correctly as 'pcie.0'
>
>Signed-off-by: Pavel Fedin <p.fedin at samsung.com>
>---
> src/qemu/qemu_capabilities.c |  8 ++++++++
> src/qemu/qemu_domain.c       | 17 +++++++++++++----
> 2 files changed, 21 insertions(+), 4 deletions(-)
>
>diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>index d570fdd..f3486c7 100644
>--- a/src/qemu/qemu_capabilities.c
>+++ b/src/qemu/qemu_capabilities.c
>@@ -2138,6 +2138,14 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps,
>         return false;
>     }
>
>+    if (ARCH_IS_ARM(def->os.arch)) {
>+        /* If 'virt' supports PCI, it supports multibus.
>+         * No extra conditions here for simplicity.
>+         */

So every ARM qemu with the "virt" machine type supports both PCI and
multiqueue?  How about those "virt-*" for which you check below.  That
might not be related, I'm just curious.

>+        if (STREQ(def->os.machine, "virt"))
>+            return true;
>+    }
>+
>     return false;
> }
>
>diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>index 8b050a0..c7d14e4 100644
>--- a/src/qemu/qemu_domain.c
>+++ b/src/qemu/qemu_domain.c
>@@ -981,7 +981,7 @@ virDomainXMLNamespace virQEMUDriverDomainXMLNamespace = {
> static int
> qemuDomainDefPostParse(virDomainDefPtr def,
>                        virCapsPtr caps,
>-                       void *opaque ATTRIBUTE_UNUSED)
>+                       void *opaque)
> {
>     bool addDefaultUSB = true;
>     bool addImplicitSATA = false;
>@@ -1030,12 +1030,21 @@ qemuDomainDefPostParse(virDomainDefPtr def,
>         break;
>
>     case VIR_ARCH_ARMV7L:
>-       addDefaultUSB = false;
>-       addDefaultMemballoon = false;
>-       break;
>     case VIR_ARCH_AARCH64:
>        addDefaultUSB = false;
>        addDefaultMemballoon = false;
>+       if (STREQ(def->os.machine, "virt") ||
>+           STRPREFIX(def->os.machine, "virt-")) {
>+           virQEMUDriverPtr driver = opaque;
>+
>+           /* This condition is actually a (temporary) hack for test suite which
>+            * does not create capabilities cache */

Few questions here.  a) how "temporary" is this since you're not
removing it in this series?  b) for what tests you need this hack and
what part of the below is the hack?

Moreover, you cannot use capabilities when defining an XML.  The
emulator can change between the domain is defined and started, so you
cannot know with what emulator this will be started.

I see Michal (Cc'd) just pushed this, I probably just missed the mail
from him.  Anyway, I don't think this is how this should be handled.
I know this is bit of a chicken-and-egg problem due to the fact that
we generate addresses during definitions.  But I think we could figure
something out instead of this hack.

>+           if (driver->qemuCapsCache) {
>+               virQEMUCapsPtr qemuCaps =
>+                   virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator);
>+               addPCIeRoot = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_GPEX);
>+           }
>+       }
>        break;
>
>     case VIR_ARCH_PPC64:
>--
>1.9.5.msysgit.0
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150806/5b5149e0/attachment-0001.sig>


More information about the libvir-list mailing list