aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHan, Weidong <weidong.han@intel.com>2009-04-04 05:21:26 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2009-04-04 05:41:32 -0400
commit34aaaa948e3c9dd65b27fa499c5c9e8d8f1227cf (patch)
treec6834b2bdc46032308f7bcb5cffa7205817841ea
parent161fde083f3403e7aa178dc944bf43c339e18491 (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.c7
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);