|
@@ -1299,18 +1299,17 @@ static void * __init memblock_virt_alloc_internal(
|
|
|
|
|
|
if (max_addr > memblock.current_limit)
|
|
if (max_addr > memblock.current_limit)
|
|
max_addr = memblock.current_limit;
|
|
max_addr = memblock.current_limit;
|
|
-
|
|
|
|
again:
|
|
again:
|
|
alloc = memblock_find_in_range_node(size, align, min_addr, max_addr,
|
|
alloc = memblock_find_in_range_node(size, align, min_addr, max_addr,
|
|
nid, flags);
|
|
nid, flags);
|
|
- if (alloc)
|
|
|
|
|
|
+ if (alloc && !memblock_reserve(alloc, size))
|
|
goto done;
|
|
goto done;
|
|
|
|
|
|
if (nid != NUMA_NO_NODE) {
|
|
if (nid != NUMA_NO_NODE) {
|
|
alloc = memblock_find_in_range_node(size, align, min_addr,
|
|
alloc = memblock_find_in_range_node(size, align, min_addr,
|
|
max_addr, NUMA_NO_NODE,
|
|
max_addr, NUMA_NO_NODE,
|
|
flags);
|
|
flags);
|
|
- if (alloc)
|
|
|
|
|
|
+ if (alloc && !memblock_reserve(alloc, size))
|
|
goto done;
|
|
goto done;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1328,7 +1327,6 @@ again:
|
|
|
|
|
|
return NULL;
|
|
return NULL;
|
|
done:
|
|
done:
|
|
- memblock_reserve(alloc, size);
|
|
|
|
ptr = phys_to_virt(alloc);
|
|
ptr = phys_to_virt(alloc);
|
|
memset(ptr, 0, size);
|
|
memset(ptr, 0, size);
|
|
|
|
|