From: Joerg Roedel <[email protected]> This BUG_ON is easy to trigger with device-hotplug (e.g. SR-IOV). The device_notifier function in the Intel IOMMU driver listens to the BUS_NOTIFY_DEL_DEVICE event and frees the domain for the device if it is reveived.
But this event is triggered before the device driver is unbound from the device. When the driver core actually removes the device the driver may release pending DMA resources, which ends up in intel_unmap and triggers the BUG_ON. Not listening to BUS_NOTIFY_DEL_DEVICE would cause resource leakage with devices that have never been assigned to any driver, so fix this issue by just making unmap a nop when the domain is already released. Cc: Jiang Liu <[email protected]> Cc: David Woodhouse <[email protected]> Signed-off-by: Joerg Roedel <[email protected]> --- drivers/iommu/intel-iommu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index d1f5caa..7d689d7 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -3196,7 +3196,8 @@ static void intel_unmap(struct device *dev, dma_addr_t dev_addr) return; domain = find_domain(dev); - BUG_ON(!domain); + if (!domain) + return; iommu = domain_get_iommu(domain); -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

