diff options
| -rw-r--r-- | arch/x86_64/kernel/pci-calgary.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/x86_64/kernel/pci-calgary.c b/arch/x86_64/kernel/pci-calgary.c index ba16c968ca3f..71da01e73f03 100644 --- a/arch/x86_64/kernel/pci-calgary.c +++ b/arch/x86_64/kernel/pci-calgary.c | |||
| @@ -367,16 +367,15 @@ static inline struct iommu_table *find_iommu_table(struct device *dev) | |||
| 367 | 367 | ||
| 368 | pdev = to_pci_dev(dev); | 368 | pdev = to_pci_dev(dev); |
| 369 | 369 | ||
| 370 | /* is the device behind a bridge? */ | 370 | pbus = pdev->bus; |
| 371 | if (unlikely(pdev->bus->parent)) | 371 | |
| 372 | pbus = pdev->bus->parent; | 372 | /* is the device behind a bridge? Look for the root bus */ |
| 373 | else | 373 | while (pbus->parent) |
| 374 | pbus = pdev->bus; | 374 | pbus = pbus->parent; |
| 375 | 375 | ||
| 376 | tbl = pci_iommu(pbus); | 376 | tbl = pci_iommu(pbus); |
| 377 | 377 | ||
| 378 | BUG_ON(pdev->bus->parent && | 378 | BUG_ON(tbl && (tbl->it_busno != pbus->number)); |
| 379 | (tbl->it_busno != pdev->bus->parent->number)); | ||
| 380 | 379 | ||
| 381 | return tbl; | 380 | return tbl; |
| 382 | } | 381 | } |
