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:
@@ -120,10 +120,10 @@ int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = bind_drivers_pass(parent, pre_reloc_only);
|
ret = bind_drivers_pass(parent, pre_reloc_only);
|
||||||
if (!ret)
|
if (!result || result == -EAGAIN)
|
||||||
break;
|
|
||||||
if (ret != -EAGAIN && !result)
|
|
||||||
result = ret;
|
result = ret;
|
||||||
|
if (ret != -EAGAIN)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
Reference in New Issue
Block a user