From 206d4d2b4b30889678bb6b064002013a427b1501 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Wed, 25 Mar 2015 12:21:56 -0600 Subject: dm: core: Mark device as active before calling uclass probe() methods The uclass pre-probe functions may end up calling back into the device in some circumstances. This can fail if recursion takes place. Adjust the ordering so that we mark the device as active early, then retract this later if needed. Signed-off-by: Simon Glass Reviewed-by: Marek Vasut --- drivers/core/device.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'drivers/core') diff --git a/drivers/core/device.c b/drivers/core/device.c index 4fba11857c..b7ed21c003 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -243,6 +243,8 @@ int device_probe_child(struct udevice *dev, void *parent_priv) } dev->seq = seq; + dev->flags |= DM_FLAG_ACTIVATED; + ret = uclass_pre_probe_device(dev); if (ret) goto fail; @@ -269,10 +271,8 @@ int device_probe_child(struct udevice *dev, void *parent_priv) } ret = uclass_post_probe_device(dev); - if (ret) { - dev->flags &= ~DM_FLAG_ACTIVATED; + if (ret) goto fail_uclass; - } return 0; fail_uclass: @@ -281,6 +281,8 @@ fail_uclass: __func__, dev->name); } fail: + dev->flags &= ~DM_FLAG_ACTIVATED; + dev->seq = -1; device_free(dev); -- cgit v1.2.3