On Thu, Jan 19, 2023 at 09:38:19AM +0100, Sjoerd Simons wrote: > 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;
This breaks lib_test_lmb_simple, lib_test_lmb_simple_x2 and lib_test_lmb_alloc_addr. -- Tom
signature.asc
Description: PGP signature