diff options
author | Paul Barker | 2022-11-14 12:42:35 +0000 |
---|---|---|
committer | Tom Rini | 2022-12-02 08:39:00 -0500 |
commit | dec64d55afca17bfc48366a48a0d5894b8a3bdd2 (patch) | |
tree | 3ecc7b5b7dc2980df370d6ec2b6473dc1bf3fe7c /drivers | |
parent | 9f52e765dcf4e5b940db98136ad0382aecb2b932 (diff) |
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.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/core/lists.c b/drivers/core/lists.c index 3878957c9ef..8034a8f48d9 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; |