From: Han, Weidong Date: Sat, 4 Apr 2009 09:21:26 +0000 (+0800) Subject: x86, dmar: check if it's initialized before disable queue invalidation X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=34aaaa948e3c9dd65b27fa499c5c9e8d8f1227cf;p=mv-sheeva.git 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 Signed-off-by: David Woodhouse --- diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index ef25caade54..472be1c3fff 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c @@ -523,6 +523,13 @@ int __init enable_intr_remapping(int eim) for_each_drhd_unit(drhd) { struct intel_iommu *iommu = drhd->iommu; + /* + * If the queued invalidation is already initialized, + * shouldn't disable it. + */ + if (iommu->qi) + continue; + /* * Clear previous faults. */