diff options
author | Han, Weidong <weidong.han@intel.com> | 2009-04-04 05:21:26 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-04-04 05:41:32 -0400 |
commit | 34aaaa948e3c9dd65b27fa499c5c9e8d8f1227cf (patch) | |
tree | c6834b2bdc46032308f7bcb5cffa7205817841ea | |
parent | 161fde083f3403e7aa178dc944bf43c339e18491 (diff) |
x86, dmar: check if it's initialized before disable queue invalidation
If queue invalidation is disabled after it's already initialized,
dmar_enable_qi won't re-enable it due to iommu->qi is allocated.
It may result in system hang when use queue invalidation. Add this
check to avoid this case.
Signed-off-by: Weidong Han <weidong.han@intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r-- | drivers/pci/intr_remapping.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index ef25caade54b..472be1c3fff0 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c | |||
@@ -524,6 +524,13 @@ int __init enable_intr_remapping(int eim) | |||
524 | struct intel_iommu *iommu = drhd->iommu; | 524 | struct intel_iommu *iommu = drhd->iommu; |
525 | 525 | ||
526 | /* | 526 | /* |
527 | * If the queued invalidation is already initialized, | ||
528 | * shouldn't disable it. | ||
529 | */ | ||
530 | if (iommu->qi) | ||
531 | continue; | ||
532 | |||
533 | /* | ||
527 | * Clear previous faults. | 534 | * Clear previous faults. |
528 | */ | 535 | */ |
529 | dmar_fault(-1, iommu); | 536 | dmar_fault(-1, iommu); |