From dec64d55afca17bfc48366a48a0d5894b8a3bdd2 Mon Sep 17 00:00:00 2001 From: Paul Barker Date: Mon, 14 Nov 2022 12:42:35 +0000 Subject: 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 --- drivers/core/lists.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/core') diff --git a/drivers/core/lists.c b/drivers/core/lists.c index 3878957c9e..8034a8f48d 100644 --- a/drivers/core/lists.c +++ b/drivers/core/lists.c @@ -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; -- cgit v1.2.3