From mboxrd@z Thu Jan 1 00:00:00 1970 From: Malcolm Crossley Subject: Re: [PATCH] libxl: Don't insert PCI device into xenstore for HVM guests Date: Mon, 1 Jun 2015 17:03:14 +0100 Message-ID: <556C8242.9060606@citrix.com> References: <1432886385-20313-1-git-send-email-ross.lagerwall@citrix.com> <20150601152636.GD11531@x230.dumpdata.com> <556C7DB9.5000705@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <556C7DB9.5000705@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ross Lagerwall , Konrad Rzeszutek Wilk Cc: Ian Jackson , xen-devel@lists.xen.org, Wei Liu , Ian Campbell , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org On 01/06/15 16:43, Ross Lagerwall wrote: > On 06/01/2015 04:26 PM, Konrad Rzeszutek Wilk wrote: >> On Fri, May 29, 2015 at 08:59:45AM +0100, Ross Lagerwall wrote: >>> When doing passthrough of a PCI device for an HVM guest, don't insert >>> the device into xenstore, otherwise pciback attempts to use it which >>> conflicts with QEMU. >> >> How does it conflict? > > It doesn't work with repeated use. See below. > >>> >>> This manifests itself such that the first time a device is passed to a >>> domain, it succeeds. Subsequent attempts fail unless the device is >>> unbound from pciback or the machine rebooted. >> >> Can you be more specific please? What are the issues? Why does it >> fail? > > Without this patch, if a device (e.g. a GPU) is bound to pciback and > then passed through to a guest using xl pci-attach, it appears in the > guest and works fine. If the guest is rebooted, and the device is again > passed through with xl pci-attach, it appears in the guest as before but > does not work. In Windows, it gets something like Error Code 43 and on > Linux, the Nouveau driver fails to initialize the device (with error -22 > or something). The only way to get the device to work again is to reboot > the host or unbind and rebind it to pciback. > > With this patch, it works as expected. The device is bound to pciback > and works after being passed through, even after the VM is rebooted. > >> >> There are certain things that pciback does to "prepare" an PCI device >> which QEMU also does. Some of them - such as saving the configuration >> registers (And then restoring them after the device has been detached) - >> is something that QEMU does not do. >> > > I really have no idea what the correct thing to do is, but the current > code with qemu-trad doesn't seem to work (for me). The pciback pci_stub.c implements the pciback.hide and the device reset logic. The rest of pciback implements the pciback xenbus device which PV guests need in order to map/unmap MSI interrupts and access PCI config space. QEMU emulates and handles the MSI interrupt capabilities and PCI config space directly. This is why a pciback xenbus device should not be created for passthrough PCI device being handled by QEMU. Malcolm > > Regards