X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib%2Flmb.c;h=170541734869c52e47c32b23c7c353b3ec01cd6c;hb=6b03cd107ece1fb6c84ce9ef2958b6cc1563367c;hp=49a3c9e01e59d15152660d00847a825c33575d4b;hpb=740f41d3cbefe2068247852220226c2c3b287249;p=u-boot diff --git a/lib/lmb.c b/lib/lmb.c index 49a3c9e01e..1705417348 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Procedures for maintaining information about logical memory blocks. * * Peter Bergner, IBM Corp. June 2001. * Copyright (C) 2001 Peter Bergner. - * - * SPDX-License-Identifier: GPL-2.0+ */ #include @@ -236,7 +235,7 @@ long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size) return lmb_add_region(_rgn, base, size); } -long lmb_overlaps_region(struct lmb_region *rgn, phys_addr_t base, +static long lmb_overlaps_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t size) { unsigned long i; @@ -295,7 +294,10 @@ phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phy if (max_addr == LMB_ALLOC_ANYWHERE) base = lmb_align_down(lmbbase + lmbsize - size, align); else if (lmbbase < max_addr) { - base = min(lmbbase + lmbsize, max_addr); + base = lmbbase + lmbsize; + if (base < lmbbase) + base = -1; + base = min(base, max_addr); base = lmb_align_down(base - size, align); } else continue;