From: Andy Shevchenko Date: Wed, 15 Feb 2017 14:42:21 +0000 (+0200) Subject: iommu/vt-d: Fix crash on boot when DMAR is disabled X-Git-Tag: v4.11-rc1~110^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c37a01779b3954d9c8f9ac4f663a03c11f69fded;p=platform%2Fkernel%2Flinux-exynos.git iommu/vt-d: Fix crash on boot when DMAR is disabled By default CONFIG_INTEL_IOMMU_DEFAULT_ON is not set and thus dmar_disabled variable is set. Intel IOMMU driver based on above doesn't set intel_iommu_enabled variable. The commit b0119e870837 ("iommu: Introduce new 'struct iommu_device'") mistakenly assumes it never happens and tries to unregister not ever registered resources, which crashes the kernel at boot time: BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 IP: iommu_device_unregister+0x31/0x60 Make unregister procedure conditional in free_iommu(). Fixes: b0119e870837 ("iommu: Introduce new 'struct iommu_device'") Cc: Joerg Roedel Signed-off-by: Andy Shevchenko Signed-off-by: Joerg Roedel --- diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c index d9c0dec..36e3f43 100644 --- a/drivers/iommu/dmar.c +++ b/drivers/iommu/dmar.c @@ -1108,8 +1108,10 @@ error: static void free_iommu(struct intel_iommu *iommu) { - iommu_device_sysfs_remove(&iommu->iommu); - iommu_device_unregister(&iommu->iommu); + if (intel_iommu_enabled) { + iommu_device_unregister(&iommu->iommu); + iommu_device_sysfs_remove(&iommu->iommu); + } if (iommu->irq) { if (iommu->pr_irq) {