summaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-02-08 11:31:00 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2016-02-08 11:31:02 +0100
commit46bb3a4d8490b318fbcfac7b69c217cec05d7a8f (patch)
treecffd8e86ba407fea40b6075e716267c8585384a5 /drivers/base
parentc976b06e16a166f8d67fee950625c593d22fcff2 (diff)
downloadbarebox-46bb3a4d8490b318fbcfac7b69c217cec05d7a8f.tar.gz
barebox-46bb3a4d8490b318fbcfac7b69c217cec05d7a8f.tar.xz
driver: Fix unregister device after device probe failure
When a device probe fails the device is removed from the active list. If then the device is unregistered afterwards it is removed from the active list again resulting in a crash. To fix this initialize the devices active list entry when removing it from the active list. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/driver.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index a70fbb217a..c529296fc6 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -101,6 +101,8 @@ int device_probe(struct device_d *dev)
}
list_del(&dev->active);
+ INIT_LIST_HEAD(&dev->active);
+
dev_err(dev, "probe failed: %s\n", strerror(-ret));
return ret;
@@ -258,6 +260,8 @@ static int device_probe_deferred(void)
list_for_each_entry_safe(dev, tmp, &deferred, active) {
list_del(&dev->active);
+ INIT_LIST_HEAD(&dev->active);
+
dev_dbg(dev, "re-probe device\n");
bus_for_each_driver(dev->bus, drv) {
if (match(drv, dev))