diff mbox

rtc: pcf8563: fix uninitialized use warning

Message ID 3640058.m4Rfp1dmTJ@wuerfel
State Superseded
Headers show

Commit Message

Arnd Bergmann Sept. 7, 2014, 8:42 p.m. UTC
gcc-4.9 found a potential condition under which the 'pending'
variable may be used uninitialized:

drivers/rtc/rtc-pcf8563.c: In function 'pcf8563_irq':
drivers/rtc/rtc-pcf8563.c:173:5: warning: 'pending' may be used uninitialized in this function [-Wmaybe-uninitialized]

This is because in the pcf8563_get_alarm_mode() function, we
check any nonzero return of pcf8563_read_block_data, but
in the irq function we only check for negative values, so
a possible positive value does not get detected if the compiler
chooses not to inline the entire call chain.

Checking for any non-zero value in the interrupt handler as well
is just as correct and lets the compiler know what we are doing,
without needing a bogus initialization.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Comments

Sergei Shtylyov Sept. 8, 2014, 11:02 a.m. UTC | #1
Hello.

On 9/8/2014 12:42 AM, Arnd Bergmann wrote:

> gcc-4.9 found a potential condition under which the 'pending'
> variable may be used uninitialized:

> drivers/rtc/rtc-pcf8563.c: In function 'pcf8563_irq':
> drivers/rtc/rtc-pcf8563.c:173:5: warning: 'pending' may be used uninitialized in this function [-Wmaybe-uninitialized]

> This is because in the pcf8563_get_alarm_mode() function, we
> check any nonzero return of pcf8563_read_block_data, but
> in the irq function we only check for negative values, so
> a possible positive value does not get detected if the compiler
> chooses not to inline the entire call chain.

> Checking for any non-zero value in the interrupt handler as well
> is just as correct and lets the compiler know what we are doing,
> without needing a bogus initialization.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>
> diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
> index 5a197d9dc7e7..3a6f994c4da8 100644
> --- a/drivers/rtc/rtc-pcf8563.c
> +++ b/drivers/rtc/rtc-pcf8563.c
> @@ -167,7 +167,7 @@ static irqreturn_t pcf8563_irq(int irq, void *dev_id)
>   	char pending;
>
>   	err = pcf8563_get_alarm_mode(pcf8563->client, NULL, &pending);
> -	if (err < 0)
> +	if (err)
>   		return err;

    Returning negative values from the IRQ handler doesn't seem valid.
Arbitrary positive value aren't good either. Perhaps should return IRQ_NONE 
instead?

WBR, Sergei
Arnd Bergmann Sept. 8, 2014, 3:22 p.m. UTC | #2
On Monday 08 September 2014 15:02:00 Sergei Shtylyov wrote:
> > diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
> > index 5a197d9dc7e7..3a6f994c4da8 100644
> > --- a/drivers/rtc/rtc-pcf8563.c
> > +++ b/drivers/rtc/rtc-pcf8563.c
> > @@ -167,7 +167,7 @@ static irqreturn_t pcf8563_irq(int irq, void *dev_id)
> >       char pending;
> >
> >       err = pcf8563_get_alarm_mode(pcf8563->client, NULL, &pending);
> > -     if (err < 0)
> > +     if (err)
> >               return err;
> 
>     Returning negative values from the IRQ handler doesn't seem valid.
> Arbitrary positive value aren't good either. Perhaps should return IRQ_NONE 
> instead?

Good point. This is unrelated to the problem I was trying to fix, but it
seems like a good idea to fix both.

	Arnd
Sergei Shtylyov Sept. 8, 2014, 3:40 p.m. UTC | #3
On 9/8/2014 7:22 PM, Arnd Bergmann wrote:

>>> diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
>>> index 5a197d9dc7e7..3a6f994c4da8 100644
>>> --- a/drivers/rtc/rtc-pcf8563.c
>>> +++ b/drivers/rtc/rtc-pcf8563.c
>>> @@ -167,7 +167,7 @@ static irqreturn_t pcf8563_irq(int irq, void *dev_id)
>>>        char pending;
>>>
>>>        err = pcf8563_get_alarm_mode(pcf8563->client, NULL, &pending);
>>> -     if (err < 0)
>>> +     if (err)
>>>                return err;

>>      Returning negative values from the IRQ handler doesn't seem valid.
>> Arbitrary positive value aren't good either. Perhaps should return IRQ_NONE
>> instead?

> Good point. This is unrelated to the problem I was trying to fix, but it
> seems like a good idea to fix both.

    Then it would be good if you fix this issue with a separate patch.

> 	Arnd

WBR, Sergei
diff mbox

Patch

diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
index 5a197d9dc7e7..3a6f994c4da8 100644
--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -167,7 +167,7 @@  static irqreturn_t pcf8563_irq(int irq, void *dev_id)
 	char pending;
 
 	err = pcf8563_get_alarm_mode(pcf8563->client, NULL, &pending);
-	if (err < 0)
+	if (err)
 		return err;
 
 	if (pending) {