Skip to contentSkip to conversation

question about

DISCUSSION Dan Carpenter 2 participants 2 messages May 28, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hi,

I was going through some Smatch stuff and it complains about something in drivers/leds/leds-88pm860x.c Could you take a look at it? I'm not sure what was intended there.

drivers/leds/leds-88pm860x.c +228 __check_device(6) warn: unsigned 'p->flags' is never less than zero.
222 static int __check_device(struct pm860x_led_pdata *pdata, char *name)
223 {
224 struct pm860x_led_pdata *p = pdata;
225 int ret = -EINVAL;
226
227 while (p && p->id) {
228 if ((p->id != PM8606_ID_LED) || (p->flags < 0))

                                                         ^^^^^^^^^^^^

	p->flags is an unsigned int so this condition is never true.
   229                          break;
   230
   231                  if (!strncmp(name, pm860x_led_name[p->flags],
   232                          MFD_NAME_SIZE)) {
   233                          ret = (int)p->flags;
   234                          break;
   235                  }
   236                  p++;
   237          }
   238          return ret;
   239  }

regards,
dan carpenter

#1 lore raw

Thanks for your good catch. We needn't this checking at here. Now I format this patch.

Best Regards
Haojian

-----Original Message-----
From: Dan Carpenter [mailto:[email protected]]
Sent: 2010年5月28日 7:46 PM
To: Haojian Zhuang
Cc: [email protected]
Subject: question about

Hi,

I was going through some Smatch stuff and it complains about something in drivers/leds/leds-88pm860x.c Could you take a look at it? I'm not sure what was intended there.

drivers/leds/leds-88pm860x.c +228 __check_device(6) warn: unsigned 'p->flags' is never less than zero.
222 static int __check_device(struct pm860x_led_pdata *pdata, char *name)
223 {
224 struct pm860x_led_pdata *p = pdata;
225 int ret = -EINVAL;
226
227 while (p && p->id) {
228 if ((p->id != PM8606_ID_LED) || (p->flags < 0))

                                                         ^^^^^^^^^^^^

	p->flags is an unsigned int so this condition is never true.
   229                          break;
   230
   231                  if (!strncmp(name, pm860x_led_name[p->flags],
   232                          MFD_NAME_SIZE)) {
   233                          ret = (int)p->flags;
   234                          break;
   235                  }
   236                  p++;
   237          }
   238          return ret;
   239  }

regards,
dan carpenter

From 59b2a1391d531bf06143ad5fc7b86490fead5065 Mon Sep 17 00:00:00 2001
From: Haojian Zhuang <[email protected]>
Date: Fri, 28 May 2010 21:36:47 +0800
Subject: [PATCH] leds: remove redundant checking

flags variable is declared as unsigned. So we needn't to check whether it's negative value.

---
 drivers/leds/leds-88pm860x.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/leds/leds-88pm860x.c +1 -1
index da146da..5decc1c 100644
@@ -160,7 +160,7 @@ static int __check_device(struct pm860x_led_pdata *pdata, char *name)
 	int ret = -EINVAL;
 
 	while (p && p->id) {
-		if ((p->id != PM8606_ID_LED) || (p->flags < 0))
+		if (p->id != PM8606_ID_LED)
 			break;
 
 		if (!strncmp(name, pm860x_led_name[p->flags],
Signature · 1 line
1.5.6.5