On Tue, Oct 20, 2020 at 2:36 AM Vincent Whitchurch <vincent.whitchurch@xxxxxxxx> wrote: > > The reserved-memory overlap detection code fails to detect overlaps if > either of the regions starts at address 0x0. For some reason the code > explicitly checks for and ignores such regions, but this check looks > invalid. Remove the check and fix this detection. Wouldn't 'base' be 0 for nodes that have a 'size' and no address? The base in those cases isn't set until later when __reserved_mem_alloc_size() is called. > > For example, no overlap is currently reported for this case: > > foo@0 { > reg = <0x0000 0x2000>; > }; > > bar@1000 { > reg = <0x1000 0x1000>; > }; > > but it is after this patch: > > OF: reserved mem: OVERLAP DETECTED! > foo@0 (0x00000000--0x00002000) overlaps with bar@1000 (0x00001000--0x00002000) > > Signed-off-by: Vincent Whitchurch <vincent.whitchurch@xxxxxxxx> > --- > drivers/of/of_reserved_mem.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c > index 46b9371c8a33..1c5259e3e81f 100644 > --- a/drivers/of/of_reserved_mem.c > +++ b/drivers/of/of_reserved_mem.c > @@ -217,8 +217,7 @@ static void __init __rmem_check_for_overlap(void) > > this = &reserved_mem[i]; > next = &reserved_mem[i + 1]; > - if (!(this->base && next->base)) > - continue; > + > if (this->base + this->size > next->base) { > phys_addr_t this_end, next_end; > > -- > 2.28.0 >