On 13.04.2015 08:54, Sascha Hauer wrote:
On Fri, Apr 10, 2015 at 03:02:43AM +0200, Sebastian Hesselbarth wrote:
As expected, we would need deferred probing sooner or later. This is
a first approach to allow devices to return -EPROBE_DEFER and get
sorted into a list of deferred devices that will be re-probed later.
[...}
+static int device_probe_deferred(void)
+{
+       struct device_d *dev, *tmp;
+       struct driver_d *drv;
+       int retries = 10;
+
+       do {
+               if (list_empty(&deferred))
+                       break;
+
+               list_for_each_entry_safe(dev, tmp, &deferred, active) {
+                       list_del(&dev->active);
+
+                       if (dev->bus) {
+                               bus_for_each_driver(dev->bus, drv) {
+                                       if (!match(drv, dev))
+                                               break;
+                               }
+                               device_probe(dev);
+                       }
+               }
+       } while (retries--);

Instead of a hardcoded loop counter I think this should be "while at least
one device successfully probed". Also if probe fails and the return
value is still -EPROBE_DEFER you have to add the device to the deferred
list again.

Sascha,

agreed. I'll have another look at how deferred probing is handled here
and resend once I have implemented your comments above.

Sebastian


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to