]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
lmb: Treat a region which is a subset as equal
authorSjoerd Simons <sjoerd@collabora.com>
Sun, 12 Feb 2023 15:07:05 +0000 (16:07 +0100)
committerTom Rini <trini@konsulko.com>
Sun, 12 Feb 2023 16:54:18 +0000 (11:54 -0500)
In various cases logical memory blocks are coalesced; As a result doing
a strict check whether memory blocks are the same doesn't necessarily
work as a previous addition of a given block might have been merged into
a bigger block.

Fix this by considering a block is already registered if it's a pure
subset of one of the existing blocks.

Signed-off-by: Sjoerd Simons <sjoerd@collabora.com>
lib/lmb.c

index f447c639a60e956a983582d42995c52bc3206ece..2444b2a621219506b8367231f46858023b54363c 100644 (file)
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -247,8 +247,10 @@ static long lmb_add_region_flags(struct lmb_region *rgn, phys_addr_t base,
                phys_addr_t rgnbase = rgn->region[i].base;
                phys_size_t rgnsize = rgn->region[i].size;
                phys_size_t rgnflags = rgn->region[i].flags;
+               phys_addr_t end = base + size - 1;
+               phys_addr_t rgnend = rgnbase + rgnsize - 1;
 
-               if (rgnbase == base && rgnsize == size) {
+               if (rgnbase <= base && end <= rgnend) {
                        if (flags == rgnflags)
                                /* Already have this region, so we're done */
                                return 0;