Hi Enric, Am Dienstag, 8. Oktober 2019, 15:58:43 CEST schrieb Enric Balletbo i Serra: > As platform_get_irq() now prints an error when the interrupt does not > exist, counting interrupts by looping until failure causes the printing > of scary messages like: > > rk_iommu ff924000.iommu: IRQ index 1 not found > rk_iommu ff914000.iommu: IRQ index 1 not found > rk_iommu ff903f00.iommu: IRQ index 1 not found > rk_iommu ff8f3f00.iommu: IRQ index 1 not found > rk_iommu ff650800.iommu: IRQ index 1 not found > > Fix this by using the platform_irq_count() helper to avoid touching > non-existent interrupts. It looks like we did the same fix ... see my patch from september 25: https://patchwork.kernel.org/patch/11161221/ > Fixes: 7723f4c5ecdb8d83 ("driver core: platform: Add an error message to platform_get_irq*()") > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@xxxxxxxxxxxxx> > --- > > drivers/iommu/rockchip-iommu.c | 35 +++++++++++++++++++++++----------- > 1 file changed, 24 insertions(+), 11 deletions(-) > > diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c > index 26290f310f90..8c6318bd1b37 100644 > --- a/drivers/iommu/rockchip-iommu.c > +++ b/drivers/iommu/rockchip-iommu.c > @@ -1136,7 +1136,7 @@ static int rk_iommu_probe(struct platform_device *pdev) > struct rk_iommu *iommu; > struct resource *res; > int num_res = pdev->num_resources; > - int err, i, irq; > + int err, i, irq, num_irqs; > > iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL); > if (!iommu) > @@ -1219,20 +1219,28 @@ static int rk_iommu_probe(struct platform_device *pdev) > > pm_runtime_enable(dev); > > - i = 0; > - while ((irq = platform_get_irq(pdev, i++)) != -ENXIO) { > - if (irq < 0) > - return irq; > + num_irqs = platform_irq_count(pdev); > + if (num_irqs < 0) { > + err = num_irqs; > + goto err_disable_pm_runtime; > + } By moving the basic irq count above the pm_runtime_enable you save some lines and the whole goto logic ... see my patch for reference :-D Heiko > + > + for (i = 0; i < num_irqs; i++) { > + irq = platform_get_irq(pdev, i); > + if (irq < 0) { > + err = irq; > + goto err_disable_pm_runtime; > + } > > err = devm_request_irq(iommu->dev, irq, rk_iommu_irq, > IRQF_SHARED, dev_name(dev), iommu); > - if (err) { > - pm_runtime_disable(dev); > - goto err_remove_sysfs; > - } > + if (err) > + goto err_disable_pm_runtime; > } > > return 0; > +err_disable_pm_runtime: > + pm_runtime_disable(dev); > err_remove_sysfs: > iommu_device_sysfs_remove(&iommu->iommu); > err_put_group: > @@ -1245,10 +1253,15 @@ static int rk_iommu_probe(struct platform_device *pdev) > static void rk_iommu_shutdown(struct platform_device *pdev) > { > struct rk_iommu *iommu = platform_get_drvdata(pdev); > - int i = 0, irq; > + int i, irq, num_irqs; > > - while ((irq = platform_get_irq(pdev, i++)) != -ENXIO) > + num_irqs = platform_irq_count(pdev); > + for (i = 0; i < num_irqs; i++) { > + irq = platform_get_irq(pdev, i); > + if (irq < 0) > + continue; > devm_free_irq(iommu->dev, irq, iommu); > + } > > pm_runtime_force_suspend(&pdev->dev); > } > _______________________________________________ Linux-rockchip mailing list Linux-rockchip@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-rockchip