Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1322754 > unrolled thread

[PATCH] net: smc91x: propagate irq return code

Started byRobert Jarzmik <robert.jarzmik@free.fr>
First post2016-01-31 23:50 +0100
Last post2016-02-01 22:10 +0100
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] net: smc91x: propagate irq return code Robert Jarzmik <robert.jarzmik@free.fr> - 2016-01-31 23:50 +0100
    Re: [PATCH] net: smc91x: propagate irq return code Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> - 2016-02-01 13:40 +0100
      Re: [PATCH] net: smc91x: propagate irq return code Robert Jarzmik <robert.jarzmik@free.fr> - 2016-02-01 21:50 +0100
        Re: [PATCH] net: smc91x: propagate irq return code Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> - 2016-02-01 22:00 +0100
          Re: [PATCH] net: smc91x: propagate irq return code Robert Jarzmik <robert.jarzmik@free.fr> - 2016-02-01 22:10 +0100

#1322754 — [PATCH] net: smc91x: propagate irq return code

FromRobert Jarzmik <robert.jarzmik@free.fr>
Date2016-01-31 23:50 +0100
Subject[PATCH] net: smc91x: propagate irq return code
Message-ID<qX8YG-1Bq-13@gated-at.bofh.it>
The smc91x driver doesn't honor the probe deferral mechanism when the
interrupt source is not yet available, such as one provided by a gpio
controller not probed.

Fix this by propagating the platform_get_irq() error code as the probe
return value.

Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
---
 drivers/net/ethernet/smsc/smc91x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c
index 0e2fc1a844ab..43ab7aa31a79 100644
--- a/drivers/net/ethernet/smsc/smc91x.c
+++ b/drivers/net/ethernet/smsc/smc91x.c
@@ -2343,7 +2343,7 @@ static int smc_drv_probe(struct platform_device *pdev)
 
 	ndev->irq = platform_get_irq(pdev, 0);
 	if (ndev->irq <= 0) {
-		ret = -ENODEV;
+		ret = ndev->irq;
 		goto out_release_io;
 	}
 	/*
-- 
2.1.4

[toc] | [next] | [standalone]


#1323057

FromSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Date2016-02-01 13:40 +0100
Message-ID<qXlVU-2IS-25@gated-at.bofh.it>
In reply to#1322754
Hello.

On 2/1/2016 1:46 AM, Robert Jarzmik wrote:

> The smc91x driver doesn't honor the probe deferral mechanism when the
> interrupt source is not yet available, such as one provided by a gpio
> controller not probed.
>
> Fix this by propagating the platform_get_irq() error code as the probe
> return value.
>
> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
> ---
>   drivers/net/ethernet/smsc/smc91x.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c
> index 0e2fc1a844ab..43ab7aa31a79 100644
> --- a/drivers/net/ethernet/smsc/smc91x.c
> +++ b/drivers/net/ethernet/smsc/smc91x.c
> @@ -2343,7 +2343,7 @@ static int smc_drv_probe(struct platform_device *pdev)
>
>   	ndev->irq = platform_get_irq(pdev, 0);
>   	if (ndev->irq <= 0) {
> -		ret = -ENODEV;
> +		ret = ndev->irq;

    What if 'ndev->irq' does equal 0?

MBR, Sergei

[toc] | [prev] | [next] | [standalone]


#1323484

FromRobert Jarzmik <robert.jarzmik@free.fr>
Date2016-02-01 21:50 +0100
Message-ID<qXtA6-8mr-1@gated-at.bofh.it>
In reply to#1323057
Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> writes:

> Hello.
>
> On 2/1/2016 1:46 AM, Robert Jarzmik wrote:
>
>> The smc91x driver doesn't honor the probe deferral mechanism when the
>> interrupt source is not yet available, such as one provided by a gpio
>> controller not probed.
>    What if 'ndev->irq' does equal 0?
That's not possible AFAIR.

There was a discussion where Linus had stated that the irq is a cookie, and a 0
value is "no interrupt", expcepting for the single case of a PC and its timer
interrupt.

As we're not in that case, and up to my understanding, platform_get_irq() cannot
return a 0 value, only a strictly negative or positive one.

And yet, that test now looks weird to me. I think I'll respin the patch with a
"if (ndev->irq < 0) {" instead of the "if (ndev->irq <= 0) {".

Cheers.

-- 
Robert

[toc] | [prev] | [next] | [standalone]


#1323503

FromSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Date2016-02-01 22:00 +0100
Message-ID<qXtJM-8pU-19@gated-at.bofh.it>
In reply to#1323484
On 02/01/2016 11:41 PM, Robert Jarzmik wrote:

>>> The smc91x driver doesn't honor the probe deferral mechanism when the
>>> interrupt source is not yet available, such as one provided by a gpio
>>> controller not probed.

>>     What if 'ndev->irq' does equal 0?

> That's not possible AFAIR.

    Possible if of_irq_get() returns 0 (and it will on failure!).

> There was a discussion where Linus had stated that the irq is a cookie, and a 0
> value is "no interrupt", expcepting for the single case of a PC and its timer
> interrupt.

    I know, I know... and even on x86 it was never passed to request_irq(), 
only to setup_irq()...

> As we're not in that case, and up to my understanding, platform_get_irq() cannot
> return a 0 value, only a strictly negative or positive one.

    Wishful thinking...

> And yet, that test now looks weird to me. I think I'll respin the patch with a
> "if (ndev->irq < 0) {" instead of the "if (ndev->irq <= 0) {".

    Defeating Linus' PoV as a result... ;-)

> Cheers.

MBR, Sergei

[toc] | [prev] | [next] | [standalone]


#1323510

FromRobert Jarzmik <robert.jarzmik@free.fr>
Date2016-02-01 22:10 +0100
Message-ID<qXtTt-iU-21@gated-at.bofh.it>
In reply to#1323503
Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> writes:

> On 02/01/2016 11:41 PM, Robert Jarzmik wrote:
>
>>>> The smc91x driver doesn't honor the probe deferral mechanism when the
>>>> interrupt source is not yet available, such as one provided by a gpio
>>>> controller not probed.
>
>>>     What if 'ndev->irq' does equal 0?
>
>> That's not possible AFAIR.
>
>    Possible if of_irq_get() returns 0 (and it will on failure!).
Ah good catch, didn't know that one.

>> And yet, that test now looks weird to me. I think I'll respin the patch with a
>> "if (ndev->irq < 0) {" instead of the "if (ndev->irq <= 0) {".
>
>    Defeating Linus' PoV as a result... ;-)
Well, I'd rather face the wrath of others if I'm convinced the code is more
correct. And in this case you convinced me :)

-- 
Robert

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web