]> xenbits.xensource.com Git - people/hx242/xen.git/commitdiff
libxl: do not attach xen-pciback to HVM domain, if stubdomain is in use
authorMarek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Sat, 28 Sep 2019 14:20:35 +0000 (15:20 +0100)
committerIan Jackson <ian.jackson@eu.citrix.com>
Fri, 4 Oct 2019 16:04:51 +0000 (17:04 +0100)
HVM domains use IOMMU and device model assistance for communicating with
PCI devices, xen-pcifront/pciback isn't directly needed by HVM domain.
But pciback serve also second function - it reset the device when it is
deassigned from the guest and for this reason pciback needs to be used
with HVM domain too.
When HVM domain has device model in stubdomain, attaching xen-pciback to
the target domain itself may prevent attaching xen-pciback to the
(PV) stubdomain, effectively breaking PCI passthrough.

Fix this by attaching pciback only to one domain: if PV stubdomain is in
use, let it be stubdomain (the commit prevents attaching device to target
HVM in this case); otherwise, attach it to the target domain.

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Release-acked-by: Juergen Gross <jgross@suse.com>
tools/libxl/libxl_pci.c

index eae086e503efd258a73c90ea60b42dbbf6cbd05f..46c18c868980c88e8fee5dd702174478a4cf6d47 100644 (file)
@@ -1399,7 +1399,7 @@ out_no_irq:
         }
     }
 
-    if (!starting)
+    if (!starting && !libxl_get_stubdom_id(CTX, domid))
         rc = libxl__device_pci_add_xenstore(gc, domid, pcidev, starting);
     else
         rc = 0;
@@ -1699,7 +1699,7 @@ static void add_pcidevs_done(libxl__egc *egc, libxl__multidev *multidev,
 
     if (rc) goto out;
 
-    if (d_config->num_pcidevs > 0) {
+    if (d_config->num_pcidevs > 0 && !libxl_get_stubdom_id(CTX, domid)) {
         rc = libxl__create_pci_backend(gc, domid, d_config->pcidevs,
             d_config->num_pcidevs);
         if (rc < 0) {