aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPaul Barker <paul.barker@sancloud.com>2022-11-14 12:42:35 +0000
committerTom Rini <trini@konsulko.com>2022-12-02 08:39:00 -0500
commitdec64d55afca17bfc48366a48a0d5894b8a3bdd2 (patch)
tree3ecc7b5b7dc2980df370d6ec2b6473dc1bf3fe7c /drivers
parent9f52e765dcf4e5b940db98136ad0382aecb2b932 (diff)
downloadu-boot-dec64d55afca17bfc48366a48a0d5894b8a3bdd2.zip
u-boot-dec64d55afca17bfc48366a48a0d5894b8a3bdd2.tar.gz
u-boot-dec64d55afca17bfc48366a48a0d5894b8a3bdd2.tar.bz2
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/core/lists.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/core/lists.c b/drivers/core/lists.c
index 3878957..8034a8f 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;