Hi Sergei, On Sun, 14 Mar 2021, Sergey Shtylyov wrote:
The driver overrides the error codes returned by platform_get_irq() to -EINVAL, so if it returns -EPROBE_DEFER, the driver would fail the probe permanently instead of the deferred probing. Switch to propagating the error code upstream, still checking/overriding IRQ0 as libata regards it as "no IRQ" (thus polling) anyway... Fixes: 9ec36cafe43b ("of/irq: do irq resolution in platform_get_irq") Signed-off-by: Sergey Shtylyov <s.shtylyov@xxxxxxxxxxxx>
Thanks for your patch, which is now commit 4a24efa16e7db023 ("sata_highbank: fix deferred probing") in block/for-next.
--- linux-block.orig/drivers/ata/sata_highbank.c +++ linux-block/drivers/ata/sata_highbank.c @@ -469,10 +469,12 @@ static int ahci_highbank_probe(struct pl } irq = platform_get_irq(pdev, 0); - if (irq <= 0) { + if (irq < 0) { dev_err(dev, "no irq\n");
This message should not be printed in case of -EPROBE_DEFER...
- return -EINVAL; + return irq;
... hence return dev_err_probe(dev, irq, "no irq\n"); Same for pata_rb532_cf.
} + if (!irq) + return -EINVAL; hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL); if (!hpriv) {
Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds