[PATCH 1/3] driver: fix device remove order

Sascha Hauer s.hauer at pengutronix.de
Mon Mar 16 23:25:52 PDT 2015


The active list is supposed to collect active devices in the
opposite order they are probed. This is used to remove the
devices in the correct order in devices_shutdown. The order
is wrong though when in a drivers probe function other devices
are registered. To get the order right we have to add the new
device to the active list before it is probed.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 drivers/base/driver.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 3363b56..453966b 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -85,14 +85,15 @@ int device_probe(struct device_d *dev)
 
 	pinctrl_select_state_default(dev);
 
+	list_add(&dev->active, &active);
+
 	ret = dev->bus->probe(dev);
 	if (ret) {
+		list_del(&dev->active);
 		dev_err(dev, "probe failed: %s\n", strerror(-ret));
 		return ret;
 	}
 
-	list_add(&dev->active, &active);
-
 	return 0;
 }
 
-- 
2.1.4




More information about the barebox mailing list