|
@@ -105,13 +105,18 @@ static phys_addr_t __init memblock_find_region(phys_addr_t start, phys_addr_t en
|
|
|
phys_addr_t base, res_base;
|
|
|
long j;
|
|
|
|
|
|
+ /* In case, huge size is requested */
|
|
|
+ if (end < size)
|
|
|
+ return MEMBLOCK_ERROR;
|
|
|
+
|
|
|
+ base = memblock_align_down((end - size), align);
|
|
|
+
|
|
|
/* Prevent allocations returning 0 as it's also used to
|
|
|
* indicate an allocation failure
|
|
|
*/
|
|
|
if (start == 0)
|
|
|
start = PAGE_SIZE;
|
|
|
|
|
|
- base = memblock_align_down((end - size), align);
|
|
|
while (start <= base) {
|
|
|
j = memblock_overlaps_region(&memblock.reserved, base, size);
|
|
|
if (j < 0)
|