iommu/rockchip: Don't provoke WARN for harmless IRQs
authorRobin Murphy <robin.murphy@arm.com>
Mon, 11 Nov 2019 18:55:18 +0000 (18:55 +0000)
committerJoerg Roedel <jroedel@suse.de>
Tue, 12 Nov 2019 16:07:47 +0000 (17:07 +0100)
Although we don't generally expect IRQs to fire for a suspended IOMMU,
there are certain situations (particularly with debug options) where
we might legitimately end up with the pm_runtime_get_if_in_use() call
from rk_iommu_irq() returning 0. Since this doesn't represent an actual
error, follow the other parts of the driver and save the WARN_ON()
condition for a genuine negative value. Even if we do have spurious
IRQs due to a wedged VOP asserting the shared line, it's not this
driver's job to try to second-guess the IRQ core to warn about that.

Reported-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/rockchip-iommu.c

index e845bd0..9be0322 100644 (file)
@@ -526,7 +526,7 @@ static irqreturn_t rk_iommu_irq(int irq, void *dev_id)
        int i, err;
 
        err = pm_runtime_get_if_in_use(iommu->dev);
-       if (WARN_ON_ONCE(err <= 0))
+       if (!err || WARN_ON_ONCE(err < 0))
                return ret;
 
        if (WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks)))