[PATCH 1/2] lmb: Avoid to add identical region in lmb_add_region_flags()
Kumar, Udit
u-kumar1 at ti.com
Mon Mar 11 16:36:14 CET 2024
On 3/11/2024 8:09 PM, Patrice Chotard wrote:
> In case lmb_add_region_flags() is called with the same parameter than
> an already existing lmb and this lmb is adjacent to its previous lmb with
> different flag, this lmb is added again.
Same parameter means , addr and size and different flags correct ?
> Instead breaking the loop, continue, at the next iteration, we are able
> to detect that this region already exist.
Once region already exist detected, then you can think of returning
error , no ?
> Issue reproduced on STM32MP157-DK2 with SCMI DT, bdinfo command's output
> shows:
>
> Before this patch, the last LMB [0xde000000-0xdfffffff] is duplicated:
> ...
> lmb_dump_all:nnn
> memory.cnt = 0x1 / max = 0x2
> memory[0] [0xc0000000-0xdfffffff], 0x20000000 bytes flags: 0
> reserved.cnt = 0x6 / max = 0x10
> reserved[0] [0x10000000-0x10045fff], 0x00046000 bytes flags: 4
> reserved[1] [0x30000000-0x3003ffff], 0x00040000 bytes flags: 4
> reserved[2] [0x38000000-0x3800ffff], 0x00010000 bytes flags: 4
> reserved[3] [0xdaadf000-0xdfffffff], 0x05521000 bytes flags: 0
> reserved[4] [0xde000000-0xdfffffff], 0x02000000 bytes flags: 4
> reserved[5] [0xde000000-0xdfffffff], 0x02000000 bytes flags: 4
> ...
>
> After this patch:
> ...
> lmb_dump_all:
> memory.cnt = 0x1 / max = 0x2
> memory[0] [0xc0000000-0xdfffffff], 0x20000000 bytes flags: 0
> reserved.cnt = 0x5 / max = 0x10
> reserved[0] [0x10000000-0x10045fff], 0x00046000 bytes flags: 4
> reserved[1] [0x30000000-0x3003ffff], 0x00040000 bytes flags: 4
> reserved[2] [0x38000000-0x3800ffff], 0x00010000 bytes flags: 4
> reserved[3] [0xdaadf000-0xdfffffff], 0x05521000 bytes flags: 0
> reserved[4] [0xde000000-0xdfffffff], 0x02000000 bytes flags: 4
> ...
>
> Fixes: 59c0ea5df33f ("lmb: Add support of flags for no-map properties")
>
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
>
> lib/lmb.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/lmb.c b/lib/lmb.c
> index 44f98205310..b6afb731440 100644
> --- a/lib/lmb.c
> +++ b/lib/lmb.c
> @@ -285,14 +285,14 @@ static long lmb_add_region_flags(struct lmb_region *rgn, phys_addr_t base,
> adjacent = lmb_addrs_adjacent(base, size, rgnbase, rgnsize);
> if (adjacent > 0) {
> if (flags != rgnflags)
> - break;
> + continue;
> rgn->region[i].base -= size;
> rgn->region[i].size += size;
> coalesced++;
> break;
> } else if (adjacent < 0) {
> if (flags != rgnflags)
> - break;
> + continue;
> rgn->region[i].size += size;
> coalesced++;
> break;
More information about the U-Boot
mailing list