]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
iommu/vt-d: Fix get_domain_for_dev() handling of upstream PCIe bridges
authorDavid Woodhouse <David.Woodhouse@intel.com>
Tue, 15 Apr 2014 05:01:30 +0000 (22:01 -0700)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Tue, 15 Apr 2014 05:01:30 +0000 (22:01 -0700)
Commit 146922ec79 ("iommu/vt-d: Make get_domain_for_dev() take struct
device") introduced new variables bridge_bus and bridge_devfn to
identify the upstream PCIe to PCI bridge responsible for the given
target device. Leaving the original bus/devfn variables to identify
the target device itself, now that it is no longer assumed to be PCI
and we can no longer trivially find that information.

However, the patch failed to correctly use the new variables in all
cases; instead using the as-yet-uninitialised 'bus' and 'devfn'
variables.

Reported-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/iommu/intel-iommu.c

index 13dc2318e17a3af7d5887b7b2e719c8ae483087f..f256ffc02e29df18ce8c43266fafe68b1971beb0 100644 (file)
@@ -2237,7 +2237,9 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
                                bridge_devfn = dev_tmp->devfn;
                        }
                        spin_lock_irqsave(&device_domain_lock, flags);
-                       info = dmar_search_domain_by_dev_info(segment, bus, devfn);
+                       info = dmar_search_domain_by_dev_info(segment,
+                                                             bridge_bus,
+                                                             bridge_devfn);
                        if (info) {
                                iommu = info->iommu;
                                domain = info->domain;