|
@@ -330,6 +330,9 @@ static int __init_memblock memblock_add_region(struct memblock_type *type,
|
|
|
phys_addr_t end = base + memblock_cap_size(base, &size);
|
|
|
int i, nr_new;
|
|
|
|
|
|
+ if (!size)
|
|
|
+ return 0;
|
|
|
+
|
|
|
/* special case for empty array */
|
|
|
if (type->regions[0].size == 0) {
|
|
|
WARN_ON(type->cnt != 1 || type->total_size);
|
|
@@ -430,6 +433,9 @@ static int __init_memblock memblock_isolate_range(struct memblock_type *type,
|
|
|
|
|
|
*start_rgn = *end_rgn = 0;
|
|
|
|
|
|
+ if (!size)
|
|
|
+ return 0;
|
|
|
+
|
|
|
/* we'll create at most two more regions */
|
|
|
while (type->cnt + 2 > type->max)
|
|
|
if (memblock_double_array(type) < 0)
|
|
@@ -514,7 +520,6 @@ int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)
|
|
|
(unsigned long long)base,
|
|
|
(unsigned long long)base + size,
|
|
|
(void *)_RET_IP_);
|
|
|
- BUG_ON(0 == size);
|
|
|
|
|
|
return memblock_add_region(_rgn, base, size, MAX_NUMNODES);
|
|
|
}
|