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-Url: http://git.dujemihanovic.xyz/img/sics.gif?a=commitdiff_plain;h=0d91c88230fe8bd9f8d39ca2ab69cd6282e9f949;p=u-boot.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;