dm: core: Fix iteration over driver_info records
We should only perform additional iteration steps when needed to initialize the parent of a device. Other binding errors (such as a missing driver) should not lead to additional iteration steps. Unnecessary iteration steps can cause issues when memory is tightly constrained (such as in the TPL/SPL) since device_bind_by_name() unconditionally allocates memory for a struct udevice. On the SanCloud BBE this led to boot failure caused by memory exhaustion in the SPL when booting from SPI flash. Signed-off-by: Paul Barker <paul.barker@sancloud.com>
This commit is contained in:
parent
9f52e765dc
commit
dec64d55af
@ -120,10 +120,10 @@ int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only)
|
||||
int ret;
|
||||
|
||||
ret = bind_drivers_pass(parent, pre_reloc_only);
|
||||
if (!ret)
|
||||
break;
|
||||
if (ret != -EAGAIN && !result)
|
||||
if (!result || result == -EAGAIN)
|
||||
result = ret;
|
||||
if (ret != -EAGAIN)
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
Loading…
Reference in New Issue
Block a user