From: Marek Marczykowski-Górecki Date: Sat, 28 Sep 2019 14:20:35 +0000 (+0100) Subject: libxl: do not attach xen-pciback to HVM domain, if stubdomain is in use X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~1333 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=83aa53f110941a6a4609ad1842dd7dc033d9fe44;p=xen.git libxl: do not attach xen-pciback to HVM domain, if stubdomain is in use 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 Acked-by: Wei Liu Release-acked-by: Juergen Gross --- diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c index eae086e503..46c18c8689 100644 --- a/tools/libxl/libxl_pci.c +++ b/tools/libxl/libxl_pci.c @@ -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) {