mirror of https://gitee.com/openkylin/linux.git
intel-iommu: Fix device-to-iommu mapping for PCI-PCI bridges.
When the DMAR table identifies that a PCI-PCI bridge belongs to a given IOMMU, that means that the bridge and all devices behind it should be associated with the IOMMU. Not just the bridge itself. This fixes the device_to_iommu() function accordingly. (It's broken if you have the same PCI bus numbers in multiple domains, but this function was always broken in that way; I'll be dealing with that later). Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
d0b03bd1c6
commit
924b6231ed
|
@ -477,11 +477,16 @@ static struct intel_iommu *device_to_iommu(u8 bus, u8 devfn)
|
|||
if (drhd->ignored)
|
||||
continue;
|
||||
|
||||
for (i = 0; i < drhd->devices_cnt; i++)
|
||||
for (i = 0; i < drhd->devices_cnt; i++) {
|
||||
if (drhd->devices[i] &&
|
||||
drhd->devices[i]->bus->number == bus &&
|
||||
drhd->devices[i]->devfn == devfn)
|
||||
return drhd->iommu;
|
||||
if (drhd->devices[i]->subordinate &&
|
||||
drhd->devices[i]->subordinate->number <= bus &&
|
||||
drhd->devices[i]->subordinate->subordinate >= bus)
|
||||
return drhd->iommu;
|
||||
}
|
||||
|
||||
if (drhd->include_all)
|
||||
return drhd->iommu;
|
||||
|
|
Loading…
Reference in New Issue