|
@@ -212,14 +212,15 @@ static int __init_memblock memblock_double_array(struct memblock_type *type)
|
|
|
if (use_slab) {
|
|
|
new_array = kmalloc(new_size, GFP_KERNEL);
|
|
|
addr = new_array ? __pa(new_array) : 0;
|
|
|
- } else
|
|
|
+ } else {
|
|
|
addr = memblock_find_in_range(0, MEMBLOCK_ALLOC_ACCESSIBLE, new_size, sizeof(phys_addr_t));
|
|
|
+ new_array = addr ? __va(addr) : 0;
|
|
|
+ }
|
|
|
if (!addr) {
|
|
|
pr_err("memblock: Failed to double %s array from %ld to %ld entries !\n",
|
|
|
memblock_type_name(type), type->max, type->max * 2);
|
|
|
return -1;
|
|
|
}
|
|
|
- new_array = __va(addr);
|
|
|
|
|
|
memblock_dbg("memblock: %s array is doubled to %ld at [%#010llx-%#010llx]",
|
|
|
memblock_type_name(type), type->max * 2, (u64)addr, (u64)addr + new_size - 1);
|