فهرست منبع

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>
Han, Weidong 16 سال پیش
والد
کامیت
34aaaa948e
1فایلهای تغییر یافته به همراه7 افزوده شده و 0 حذف شده
  1. 7 0
      drivers/pci/intr_remapping.c

+ 7 - 0
drivers/pci/intr_remapping.c

@@ -523,6 +523,13 @@ int __init enable_intr_remapping(int eim)
 	for_each_drhd_unit(drhd) {
 	for_each_drhd_unit(drhd) {
 		struct intel_iommu *iommu = drhd->iommu;
 		struct intel_iommu *iommu = drhd->iommu;
 
 
+		/*
+		 * If the queued invalidation is already initialized,
+		 * shouldn't disable it.
+		 */
+		if (iommu->qi)
+			continue;
+
 		/*
 		/*
 		 * Clear previous faults.
 		 * Clear previous faults.
 		 */
 		 */