From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: Re: error when pass through device to guest with qemu-xen-dir-remote Date: Tue, 18 Sep 2012 11:49:51 +0100 Message-ID: <505851CF.2090000@citrix.com> References: <1343990187.21372.48.camel@zakaz.uk.xensource.com> <40352EBA8B4DF841A9907B883F22B59B0FDBCE1E@SHSMSX102.ccr.corp.intel.com> <40352EBA8B4DF841A9907B883F22B59B0FDD25C7@SHSMSX102.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "Zhang, Yang Z" Cc: xen-devel , Stefano Stabellini , "Shan, Haitao" , "Zhou, Chao" , Ian Campbell List-Id: xen-devel@lists.xenproject.org On 09/18/2012 01:46 AM, Zhang, Yang Z wrote: > Zhang, Yang Z wrote on 2012-09-11: >> wrote on August 09, 2012 2:49 PM To: Ian Campbell; Stefano Stabellini: >>> I rebuild the upstream QEMU according to the wiki, but device static >>> assignment doesn't work, no lspci output in guest. However hotplug & >>> unplug works fine. >>> >>> -----Original Message----- From: xen-devel-bounces@lists.xen.org >>> [mailto:xen-devel-bounces@lists.xen.org] On Behalf Of Ian Campbell Sent: >>> Friday, August 03, 2012 6:36 PM To: Stefano Stabellini Cc: Zhang, Yang >>> Z; Anthony Perard; xen-devel Subject: Re: [Xen-devel] error when pass >>> through device to guest with qemu-xen-dir-remote >>> >>> On Fri, 2012-08-03 at 11:29 +0100, Stefano Stabellini wrote: >>>> On Fri, 3 Aug 2012, Zhang, Yang Z wrote: >>>>> When create guest with device assigned, it shows the error and the >>>>> device wasn't able to work inside guest: libxl: error: >>>>> libxl_qmp.c:288:qmp_handle_error_response: received an error message >>>>> from QMP server: Parameter 'driver' expects a driver name >>>>> >>>>> It only fails with qemu-xen-dir-remote(Is this tree more close to >>>>> upstream qemu?). I don't see the error with the traditional Qemu. I >>>>> also tried qemu-upstream, but it fails when I try to enable pci >>>>> pass-through >>> for xen. I think Anthony's patch to add pci pass-through support for Xen is >>> accepted by qemu-upstream, am I right? >>>> >>>> Yes, it was accepted, but it is present only in upstream QEMU (from >>>> git://git.qemu.org/qemu.git), not the tree we are currently using in >>>> xen-unstable for development >>>> (git://xenbits.xensource.com/qemu-upstream-unstable.git). >>>> Make sure you are using the right tree! >>> >>> http://wiki.xen.org/wiki/QEMU_Upstream has some notes on how to use the >>> upstream qemu tree instead of our stable branch of upstream. >>> >>>> >>>> Anthony is currently on vacation and is going to be back in about a >>>> week. >>>> >>>>> Another question: >>>>> Now I am trying to add some features (relevant to pass through device) to >>> Qemu, which tree should I use? Since traditional qemu is great >>> different from qemu-upstream, it is too old to develop patch base on >>> it. But besides the old one, I cannot find a working qemu. >>>> >>>> You should use upstream QEMU, I am going to rebase our tree on that >>>> early on in the 4.3 release cycle. >> >> Hi Anthony >> >> I found the issue is caused by PV driver. Since RHEL6 integrated PV driver by >> default, when booting rhel6 as guest, it will load the PV driver and write the xen >> platform device to notify qemu to unplug all NICs including the pass through >> device. This definitely is wrong. We only need to unplug the emulator device, and >> leave pass through device. > > Hi Anthony, > > Any comments for this? Hi, So, we'll have to add a check in the unplug code of qemu to ignore passthrough devices. Here is a patches, I did not test it. diff --git a/hw/xen_platform.c b/hw/xen_platform.c index 0d6c2ff..2d3978e 100644 --- a/hw/xen_platform.c +++ b/hw/xen_platform.c @@ -85,8 +85,10 @@ static void log_writeb ... static void unplug_nic(PCIBus *b, PCIDevice *d, void *o) { + /* We have to ignore passthrough devices */ if (pci_get_word(d->config + PCI_CLASS_DEVICE) == - PCI_CLASS_NETWORK_ETHERNET) { + PCI_CLASS_NETWORK_ETHERNET + && strcmp(d->name, "xen-pci-passthrough") != 0) { qdev_free(&d->qdev); } } Thanks, -- Anthony PERARD