diff options
-rw-r--r-- | arch/x86/kernel/pci-calgary_64.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 849a0995d970..c563e4c8ff39 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
@@ -316,13 +316,15 @@ static inline struct iommu_table *find_iommu_table(struct device *dev) | |||
316 | 316 | ||
317 | pdev = to_pci_dev(dev); | 317 | pdev = to_pci_dev(dev); |
318 | 318 | ||
319 | /* search up the device tree for an iommu */ | ||
319 | pbus = pdev->bus; | 320 | pbus = pdev->bus; |
320 | 321 | do { | |
321 | /* is the device behind a bridge? Look for the root bus */ | 322 | tbl = pci_iommu(pbus); |
322 | while (pbus->parent) | 323 | if (tbl && tbl->it_busno == pbus->number) |
324 | break; | ||
325 | tbl = NULL; | ||
323 | pbus = pbus->parent; | 326 | pbus = pbus->parent; |
324 | 327 | } while (pbus); | |
325 | tbl = pci_iommu(pbus); | ||
326 | 328 | ||
327 | BUG_ON(tbl && (tbl->it_busno != pbus->number)); | 329 | BUG_ON(tbl && (tbl->it_busno != pbus->number)); |
328 | 330 | ||