aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/devres.c3
-rw-r--r--drivers/base/firmware_class.c12
-rw-r--r--drivers/base/power/main.c1
3 files changed, 10 insertions, 6 deletions
diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index e8beb8e5b626..05dd307e8f02 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -428,6 +428,9 @@ int devres_release_all(struct device *dev)
428{ 428{
429 unsigned long flags; 429 unsigned long flags;
430 430
431 /* Looks like an uninitialized device structure */
432 if (WARN_ON(dev->devres_head.next == NULL))
433 return -ENODEV;
431 spin_lock_irqsave(&dev->devres_lock, flags); 434 spin_lock_irqsave(&dev->devres_lock, flags);
432 return release_nodes(dev, dev->devres_head.next, &dev->devres_head, 435 return release_nodes(dev, dev->devres_head.next, &dev->devres_head,
433 flags); 436 flags);
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index ddeb819c8f87..f285f441fab9 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -217,8 +217,10 @@ firmware_data_read(struct kobject *kobj, struct bin_attribute *bin_attr,
217 ret_count = -ENODEV; 217 ret_count = -ENODEV;
218 goto out; 218 goto out;
219 } 219 }
220 if (offset > fw->size) 220 if (offset > fw->size) {
221 return 0; 221 ret_count = 0;
222 goto out;
223 }
222 if (count > fw->size - offset) 224 if (count > fw->size - offset)
223 count = fw->size - offset; 225 count = fw->size - offset;
224 226
@@ -357,7 +359,7 @@ static void fw_dev_release(struct device *dev)
357 kfree(fw_priv->pages); 359 kfree(fw_priv->pages);
358 kfree(fw_priv->fw_id); 360 kfree(fw_priv->fw_id);
359 kfree(fw_priv); 361 kfree(fw_priv);
360 put_device(dev); 362 kfree(dev);
361 363
362 module_put(THIS_MODULE); 364 module_put(THIS_MODULE);
363} 365}
@@ -408,13 +410,11 @@ static int fw_register_device(struct device **dev_p, const char *fw_name,
408 if (retval) { 410 if (retval) {
409 dev_err(device, "%s: device_register failed\n", __func__); 411 dev_err(device, "%s: device_register failed\n", __func__);
410 put_device(f_dev); 412 put_device(f_dev);
411 goto error_kfree_fw_id; 413 return retval;
412 } 414 }
413 *dev_p = f_dev; 415 *dev_p = f_dev;
414 return 0; 416 return 0;
415 417
416error_kfree_fw_id:
417 kfree(fw_priv->fw_id);
418error_kfree: 418error_kfree:
419 kfree(f_dev); 419 kfree(f_dev);
420 kfree(fw_priv); 420 kfree(fw_priv);
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index fae725458981..58a3e572f2c9 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -762,6 +762,7 @@ static int dpm_prepare(pm_message_t state)
762 dev->power.status = DPM_ON; 762 dev->power.status = DPM_ON;
763 if (error == -EAGAIN) { 763 if (error == -EAGAIN) {
764 put_device(dev); 764 put_device(dev);
765 error = 0;
765 continue; 766 continue;
766 } 767 }
767 printk(KERN_ERR "PM: Failed to prepare device %s " 768 printk(KERN_ERR "PM: Failed to prepare device %s "