[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] PCI Passthrough Problems/Questions
Konrad Rzeszutek Wilk wrote: On Mon, Oct 25, 2010 at 12:50:41PM -0600, Nick Couchman wrote:On Mon, 2010-10-25 at 14:48 -0400, Konrad Rzeszutek Wilk wrote:On Mon, Oct 25, 2010 at 12:33:09PM -0600, Nick Couchman wrote:On Mon, 2010-10-25 at 13:40 -0400, Konrad Rzeszutek Wilk wrote:What do you see on your Xen serial output? I presume you cranked up logging: loglevel=all guest_lvl=all iommu=verbose on your Xen command line. Is there anything that shows up when you get the 'Failed to assign.." ?The only messages I get on the serial console after setting those parameters on the xen.gz kernel line in grub (and rebooting, of course) are the following: (XEN) [VT-D]iommu.c:1496: d0:PCI: unmap bdf = 2:0.0 (XEN) [VT-D]iommu.c:1364: d1:PCI: map bdf = 2:0.0 (XEN) domctl.c:848:d0 XEN_DOMCTL_assign_device: assign device (2:0.0) failed (XEN) event_channel.c:192:d0 EVTCHNOP failure: domain 1, error -22 Nick,I think the issue is 02:00.0 was mapped twice. Could you try with below patch? Then post the xen log. Pls post all output of 'lspci -v' on your system. diff -r eff592364826 xen/drivers/passthrough/vtd/iommu.c --- a/xen/drivers/passthrough/vtd/iommu.c Wed Sep 01 11:23:49 2010 +0100 +++ b/xen/drivers/passthrough/vtd/iommu.c Wed Oct 27 14:33:23 2010 +0800 @@ -1225,7 +1225,11 @@ static int domain_context_mapping_one( if (!pdev) res = -ENODEV; else if (pdev->domain != domain) - res = -EINVAL; + {+ dprintk(VTDPREFIX, "context_present: %x:%x.%x: pdev->domain=%d domain=%d\n", + bus, PCI_SLOT(devfn), PCI_FUNC(devfn), pdev->domain, domain->domain_id); + // res = -EINVAL; + } unmap_vtd_domain_page(context_entries); spin_unlock(&iommu->lock); return res; @@ -1352,6 +1356,8 @@ static int domain_context_mapping(struct /* PCIe to PCI/PCIx bridge */ if ( pdev_type(bus, devfn) == DEV_TYPE_PCIe2PCI_BRIDGE ) { + dprintk(VTDPREFIX, "d%d:PCI: map PCIe2PCI bdf = %x:%x.%x\n",+ domain->domain_id, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn); if ( ret ) return ret; @@ -1362,6 +1368,8 @@ static int domain_context_mapping(struct * on the secondary bus behind the bridge. Map that id * as well. */ + dprintk(VTDPREFIX, "d%d:PCI: map secbus (%d) with devfn 0\n", + domain->domain_id, secbus);ret = domain_context_mapping_one(domain, drhd->iommu, secbus, 0); } else /* Legacy PCI bridge */ So, -EINVAL. How comfortable are you sticking a bunch of dprintk(VTDPREFIX, " in the drivers/passthrough/vtd/iommu.c file? Basically you need to figure which of the functions that are past line 1364are being called and return -EINVAL.I'm happy to give it a shot...it'll take a while to get the devel environment configured, as I'm using packages right now and I don't even think I have a compiler on this system. I'll report back once I get that done and give that a try.Excellent. You might also want to CC Weidong (weidong.han@xxxxxxxxx) in the future who is right now on travel and he might have better suggestions. CC-ing him on this e-mail. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |