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 <sjo...@collabora.com> --- lib/lmb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/lmb.c b/lib/lmb.c index f447c639a60..b09a043f4c2 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -248,7 +248,7 @@ static long lmb_add_region_flags(struct lmb_region *rgn, phys_addr_t base, phys_size_t rgnsize = rgn->region[i].size; phys_size_t rgnflags = rgn->region[i].flags; - if (rgnbase == base && rgnsize == size) { + if (rgnbase <= base && rgnbase + rgnsize >= base + size) { if (flags == rgnflags) /* Already have this region, so we're done */ return 0; -- 2.39.0