5a49a4e63b
22045-python27-compat.patch Thu Nov 11 18:44:48 CST 2010 - cyliu@novell.com - bnc#641144 - FV Xen VM running windows or linux cannot write to virtual floppy drive bdrv_default_rwflag.patch - fate#310510 - fix xenpaging xenpaging.optimize_p2m_mem_paging_populate.patch xenpaging.HVMCOPY_gfn_paged_out.patch - bnc#649864 - automatic numa cpu placement of xen conflicts with cpupools 22326-cpu-pools-numa-placement.patch - fate#310510 - fix xenpaging xenpaging.populate_only_if_paged.patch - revert logic, populate needs to happen unconditionally xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch - invalidate current mfn only if gfn is not in flight or done xenpaging.mem_event_check_ring-free_requests.patch - print info only if 1 instead of 2 slots are free xenpaging.guest_remove_page.patch - check mfn before usage in resume function xenpaging.machine_to_phys_mapping.patch - check mfn before usage in resume function - bnc#552115 - Remove target discovery in block-iscsi OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=82
53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir@xen.org>
|
|
# Date 1288772331 0
|
|
# Node ID 2dfba250c50bafac4e333d84450324daedf5ae2c
|
|
# Parent 16093532f384eee02518520662a38ad16915b063
|
|
VT-d: fix device assignment failure (regression from Xen c/s 19805:2f1fa2215e60)
|
|
References: bnc#647681
|
|
|
|
If the device at <secbus>:00.0 is the device the mapping operation was
|
|
initiated for, trying to map it a second time will fail, and hence
|
|
this second mapping attempt must be prevented (as was done prior to
|
|
said c/s).
|
|
|
|
While at it, simplify the code a little, too.
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
|
Acked-by: Weidong Han <weidong.han@intel.com>
|
|
|
|
--- a/xen/drivers/passthrough/vtd/iommu.c
|
|
+++ b/xen/drivers/passthrough/vtd/iommu.c
|
|
@@ -1402,23 +1402,16 @@ static int domain_context_mapping(struct
|
|
if ( find_upstream_bridge(&bus, &devfn, &secbus) < 1 )
|
|
break;
|
|
|
|
- /* PCIe to PCI/PCIx bridge */
|
|
- if ( pdev_type(bus, devfn) == DEV_TYPE_PCIe2PCI_BRIDGE )
|
|
- {
|
|
- ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn);
|
|
- if ( ret )
|
|
- return ret;
|
|
+ ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn);
|
|
|
|
- /*
|
|
- * Devices behind PCIe-to-PCI/PCIx bridge may generate
|
|
- * different requester-id. It may originate from devfn=0
|
|
- * on the secondary bus behind the bridge. Map that id
|
|
- * as well.
|
|
- */
|
|
+ /*
|
|
+ * Devices behind PCIe-to-PCI/PCIx bridge may generate different
|
|
+ * requester-id. It may originate from devfn=0 on the secondary bus
|
|
+ * behind the bridge. Map that id as well if we didn't already.
|
|
+ */
|
|
+ if ( !ret && pdev_type(bus, devfn) == DEV_TYPE_PCIe2PCI_BRIDGE &&
|
|
+ (secbus != pdev->bus || pdev->devfn != 0) )
|
|
ret = domain_context_mapping_one(domain, drhd->iommu, secbus, 0);
|
|
- }
|
|
- else /* Legacy PCI bridge */
|
|
- ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn);
|
|
|
|
break;
|
|
|