41 lines
1.6 KiB
Diff
41 lines
1.6 KiB
Diff
diff -ur xen-4.2.1.orig/xen/drivers/passthrough/vtd/intremap.c xen-4.2.1/xen/drivers/passthrough/vtd/intremap.c
|
|
--- xen/drivers/passthrough/vtd/intremap.c 2012-12-17 23:01:55.000000000 +0800
|
|
+++ xen/drivers/passthrough/vtd/intremap.c 2013-05-15 23:09:06.704546506 +0800
|
|
@@ -440,16 +440,17 @@
|
|
type = pdev_type(seg, bus, devfn);
|
|
switch ( type )
|
|
{
|
|
+ case DEV_TYPE_PCIe_ENDPOINT:
|
|
case DEV_TYPE_PCIe_BRIDGE:
|
|
case DEV_TYPE_PCIe2PCI_BRIDGE:
|
|
- case DEV_TYPE_LEGACY_PCI_BRIDGE:
|
|
- break;
|
|
|
|
- case DEV_TYPE_PCIe_ENDPOINT:
|
|
set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16, PCI_BDF2(bus, devfn));
|
|
break;
|
|
|
|
case DEV_TYPE_PCI:
|
|
+ case DEV_TYPE_LEGACY_PCI_BRIDGE:
|
|
+ /* case DEV_TYPE_PCI2PCIe_BRIDGE: */
|
|
+
|
|
ret = find_upstream_bridge(seg, &bus, &devfn, &secbus);
|
|
if ( ret == 0 ) /* integrated PCI device */
|
|
{
|
|
@@ -461,10 +462,15 @@
|
|
if ( pdev_type(seg, bus, devfn) == DEV_TYPE_PCIe2PCI_BRIDGE )
|
|
set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16,
|
|
(bus << 8) | pdev->bus);
|
|
- else if ( pdev_type(seg, bus, devfn) == DEV_TYPE_LEGACY_PCI_BRIDGE )
|
|
+ else
|
|
set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16,
|
|
PCI_BDF2(bus, devfn));
|
|
}
|
|
+ else
|
|
+ dprintk(XENLOG_WARNING VTDPREFIX,
|
|
+ "d%d: no upstream bridge for %04x:%02x:%02x.%u\n",
|
|
+ pdev->domain->domain_id,
|
|
+ seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
|
|
break;
|
|
|
|
default:
|