Message ID | 105b456d-1199-f6e9-ceb7-ffc5ba551d1a@omprussia.ru |
---|---|
State | New |
Headers | show |
Series | sata_highbank: fix deferred probing | expand |
Hello! On 3/14/21 11:34 PM, 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@omprussia.ru> [...] 2 months have passed, and it seems the patch has been lost somewhere... MBR, Sergey
On 3/14/21 2:34 PM, 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... Applied, sorry about the delay.
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@omprussia.ru> 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@linux-m68k.org 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
On 5/19/21 10:33 AM, Geert Uytterhoeven 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@omprussia.ru> > > 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... I fact, platform_get_irq() now prints erors, even checking for EPROBE_DEFER, so the message may be removed completely... :-) > >> - return -EINVAL; >> + return irq; [...] MBR, Sergey
Index: linux-block/drivers/ata/sata_highbank.c =================================================================== --- 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"); - return -EINVAL; + return irq; } + if (!irq) + return -EINVAL; hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL); if (!hpriv) {
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@omprussia.ru> --- This patch is againt the 'master' branch of Jens Axboe's linux-block repo. drivers/ata/sata_highbank.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)