lib: Check region base for merging in sbi_domain_root_add_memregion()
authorAnup Patel <anup.patel@wdc.com>
Thu, 20 May 2021 10:17:07 +0000 (15:47 +0530)
committerAnup Patel <anup@brainfault.org>
Mon, 24 May 2021 10:17:41 +0000 (15:47 +0530)
We can merge region B onto region A only if base of region A is
aligned to region A order + 1.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
Reviewed-by: Xiang W <wxjstz@126.com>
lib/sbi/sbi_domain.c

index 84f30b9..3096af0 100644 (file)
@@ -511,7 +511,8 @@ int sbi_domain_root_add_memregion(const struct sbi_domain_memregion *reg)
                        if (!nreg1->order)
                                continue;
 
-                       if ((nreg->base + BIT(nreg->order)) == nreg1->base &&
+                       if (!(nreg->base & (BIT(nreg->order + 1) - 1)) &&
+                           (nreg->base + BIT(nreg->order)) == nreg1->base &&
                            nreg->order == nreg1->order &&
                            nreg->flags == nreg1->flags) {
                                nreg->order++;