Hi Alvaro, On 19 April 2017 at 15:25, Simon Glass <s...@chromium.org> wrote: > Hi Alvaro, > > On 19 April 2017 at 03:18, Álvaro Fernández Rojas <nolt...@gmail.com> wrote: >> This is what I think it's going on: >> >> sysreset_walk(): >> - calls uclass_first_device(): >> - Calls uclass_find_first_device(): >> - device is found. >> - ret is set to 0. >> - Calls uclass_get_device_tail(): >> - ret == 0 -> doesn't return. >> - dev != null -> assert is true. >> - Calls device_probe(): >> - It fails *somewhere* and goes to fail WITHOUT setting dev to NULL. >> - ret != 0 -> returns without setting devp = dev. >> - dev is NOT NULL but device is not probed. >> - Tries to get ops from a not probed device -> Exception. >> >> >> So basically it's a bug related to device_probe not nulling dev when failing >> and sysreset_walk() checking only if the device is not null and not the >> actual return of uclass_first_device() and uclass_next_device()... > > OK thanks for the explanation. Yes this is a bug and there are no > tests to catch it. > > In this case uclass_first/next_device() should return dev = NULL. > > I'll take a look and see if I can create a few patches.
Nope, I'm still confused. sysreset_walk() should receive dev = NULL in this case and exit. I still don't understand how this exception happens. You can see *devp being set to NULL in both uclass_first_device() and uclass_next_device(). Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot