hwmon: (pmbus) Don't return errors from driver remove functions
authorGuenter Roeck <guenter.roeck@ericsson.com>
Fri, 26 Aug 2011 15:12:38 +0000 (08:12 -0700)
committerGuenter Roeck <guenter.roeck@ericsson.com>
Mon, 24 Oct 2011 18:09:33 +0000 (11:09 -0700)
Driver remove functions have an error return value, but rarely return an error
in practice. If a driver does return an error from its remove function, the
driver won't be unloaded and is expected to stay alive.

pmbus_do_remove() is defined as returning an int, but always returns 0 (no
error). Calling code passes that return value on to high level driver
remove functions, but does not evaluate it and removes driver data even if
pmbus_do_remove() returned an error (which it in practice never does). Even if
this code could never cause a real problem, it is nevertheless conceptually
wrong.

To reduce confusion and simplify the code, change pmbus_do_remove() to be a void
function, and have PMBus client drivers always return zero in their driver
remove functions.

Reported-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Acked-by: Jean Delvare <khali@linux-fr.org>
drivers/hwmon/pmbus/adm1275.c
drivers/hwmon/pmbus/lm25066.c
drivers/hwmon/pmbus/max16064.c
drivers/hwmon/pmbus/max34440.c
drivers/hwmon/pmbus/max8688.c
drivers/hwmon/pmbus/pmbus.c
drivers/hwmon/pmbus/pmbus.h
drivers/hwmon/pmbus/pmbus_core.c
drivers/hwmon/pmbus/ucd9000.c
drivers/hwmon/pmbus/ucd9200.c

index c936e27823090e15fd542e6a6cb67eb526a6ff1d..424d0d711ccb5de35eae17d5043e84704f8ccb33 100644 (file)
@@ -152,11 +152,10 @@ err_mem:
 static int adm1275_remove(struct i2c_client *client)
 {
        const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
-       int ret;
 
-       ret = pmbus_do_remove(client);
+       pmbus_do_remove(client);
        kfree(info);
-       return ret;
+       return 0;
 }
 
 static const struct i2c_device_id adm1275_id[] = {
index ac254fba551b21cc30b4a8276683cb85ab57ea67..2107f413e4fc287ab331291899d496c904a23d93 100644 (file)
@@ -309,11 +309,10 @@ static int lm25066_remove(struct i2c_client *client)
 {
        const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
        const struct lm25066_data *data = to_lm25066_data(info);
-       int ret;
 
-       ret = pmbus_do_remove(client);
+       pmbus_do_remove(client);
        kfree(data);
-       return ret;
+       return 0;
 }
 
 static const struct i2c_device_id lm25066_id[] = {
index e50b296e8db4c5810453e89f7573f3d209c73d30..1d77cf4d2d442158a95ed7801ed9cd392f99fb2f 100644 (file)
@@ -105,7 +105,8 @@ static int max16064_probe(struct i2c_client *client,
 
 static int max16064_remove(struct i2c_client *client)
 {
-       return pmbus_do_remove(client);
+       pmbus_do_remove(client);
+       return 0;
 }
 
 static const struct i2c_device_id max16064_id[] = {
index fda621d2e458feafb10e039419e5bb94bbe392cb..c824365e4aa4ee69fdb161e9b820771019de84c8 100644 (file)
@@ -224,7 +224,8 @@ static int max34440_probe(struct i2c_client *client,
 
 static int max34440_remove(struct i2c_client *client)
 {
-       return pmbus_do_remove(client);
+       pmbus_do_remove(client);
+       return 0;
 }
 
 static const struct i2c_device_id max34440_id[] = {
index c3e72f1a3cfb1fa0493dd92c373c2608338a5a0f..e148e2c5a756611576539d30dc45425b279896c7 100644 (file)
@@ -182,7 +182,8 @@ static int max8688_probe(struct i2c_client *client,
 
 static int max8688_remove(struct i2c_client *client)
 {
-       return pmbus_do_remove(client);
+       pmbus_do_remove(client);
+       return 0;
 }
 
 static const struct i2c_device_id max8688_id[] = {
index 73de9f1f3194804c06418f43a5d0491a00ab6edc..1dfba447749819c9fb674c6639ddd22c074e7ddb 100644 (file)
@@ -187,13 +187,12 @@ out:
 
 static int pmbus_remove(struct i2c_client *client)
 {
-       int ret;
        const struct pmbus_driver_info *info;
 
        info = pmbus_get_driver_info(client);
-       ret = pmbus_do_remove(client);
+       pmbus_do_remove(client);
        kfree(info);
-       return ret;
+       return 0;
 }
 
 /*
index 8751f4073ec2eb1bc906d3b55ed1ad480b448c61..cfa912d0f0b0a383b9a85d805c9889154a299b18 100644 (file)
@@ -361,7 +361,7 @@ bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg);
 bool pmbus_check_word_register(struct i2c_client *client, int page, int reg);
 int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
                   struct pmbus_driver_info *info);
-int pmbus_do_remove(struct i2c_client *client);
+void pmbus_do_remove(struct i2c_client *client);
 const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client
                                                      *client);
 
index 397fc59b5682e44901b29d9857e719c34697e8c5..36f287076ee2ad42df763354f5fc1f9c61c761ca 100644 (file)
@@ -1764,7 +1764,7 @@ out_data:
 }
 EXPORT_SYMBOL_GPL(pmbus_do_probe);
 
-int pmbus_do_remove(struct i2c_client *client)
+void pmbus_do_remove(struct i2c_client *client)
 {
        struct pmbus_data *data = i2c_get_clientdata(client);
        hwmon_device_unregister(data->hwmon_dev);
@@ -1774,7 +1774,6 @@ int pmbus_do_remove(struct i2c_client *client)
        kfree(data->booleans);
        kfree(data->sensors);
        kfree(data);
-       return 0;
 }
 EXPORT_SYMBOL_GPL(pmbus_do_remove);
 
index d0ddb60155c972c8136d3e2ddd9d0f857fc29cd9..640a9c9de7f8379540086d3a0d3aa9379c925298 100644 (file)
@@ -239,13 +239,12 @@ out:
 
 static int ucd9000_remove(struct i2c_client *client)
 {
-       int ret;
        struct ucd9000_data *data;
 
        data = to_ucd9000_data(pmbus_get_driver_info(client));
-       ret = pmbus_do_remove(client);
+       pmbus_do_remove(client);
        kfree(data);
-       return ret;
+       return 0;
 }
 
 
index c65e9da707cc160a25e74681bc681715e189f3d1..6e1c1a80ab856d5c936001bb47b9d9ef885ab6b9 100644 (file)
@@ -171,13 +171,12 @@ out:
 
 static int ucd9200_remove(struct i2c_client *client)
 {
-       int ret;
        const struct pmbus_driver_info *info;
 
        info = pmbus_get_driver_info(client);
-       ret = pmbus_do_remove(client);
+       pmbus_do_remove(client);
        kfree(info);
-       return ret;
+       return 0;
 }