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
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox