From: Sjoerd Simons Date: Sun, 12 Feb 2023 15:07:05 +0000 (+0100) Subject: lmb: Treat a region which is a subset as equal X-Git-Tag: baikal/mips/sdk5.8.2~5^2~48 X-Git-Url: https://git.baikalelectronics.ru/?a=commitdiff_plain;h=7cd78d461dd070997f035053715b71b04e67b2e2;p=uboot.git lmb: Treat a region which is a subset as equal 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 --- diff --git a/lib/lmb.c b/lib/lmb.c index f447c639a6..2444b2a621 100644 --- 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;