diff mbox series

sata_highbank: fix deferred probing

Message ID 105b456d-1199-f6e9-ceb7-ffc5ba551d1a@omprussia.ru
State New
Headers show
Series sata_highbank: fix deferred probing | expand

Commit Message

Sergey Shtylyov March 14, 2021, 8:34 p.m. UTC
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(-)

Comments

Sergey Shtylyov May 18, 2021, 6:30 p.m. UTC | #1
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
Jens Axboe May 18, 2021, 9:18 p.m. UTC | #2
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.
Geert Uytterhoeven May 19, 2021, 7:33 a.m. UTC | #3
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
Sergey Shtylyov May 19, 2021, 3:19 p.m. UTC | #4
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
diff mbox series

Patch

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) {