mem-hotplug: let memblock skip the hotpluggable memory regions in __next_mem_range()
PATCH v2 1/1 mem-hotplug: let memblock skip the hotpluggable memory regions in __next_mem_range()
Let memblock skip the hotpluggable memory regions in __next_mem_range(), it is used to to prevent memblock from allocating hotpluggable memory for the kernel at early time. The code is the same as __next_mem_range_rev().
Clear hotpluggable flag before releasing free pages to the buddy allocator. If we don't clear hotpluggable flag in free_low_memory_core_early(), the memory which marked hotpluggable flag will not free to buddy allocator. Because __next_mem_range() will skip them.
free_low_memory_core_early
for_each_free_mem_range
for_each_mem_range
__next_mem_range
Signed-off-by Xishi Qiu <[email protected]>
--- mm/memblock.c | 4 ++++ mm/nobootmem.c | 2 ++ 2 files changed, 6 insertions(+), 0 deletions(-)
mm/memblock.c +4 -0
@@ -817,6 +817,10 @@ void __init_memblock __next_mem_range(u64 *idx, int nid,if (nid !=NUMA_NO_NODE && nid != m_nid)continue ; +/* skip hotpluggable memory regions if needed */ +if (movable_node_is_enabled () &&memblock_is_hotpluggable (m)) +continue ; +if (!type_b) {if (out_start) *out_start = m_start;
mm/nobootmem.c +2 -0
@@ -119,6 +119,8 @@ static unsigned long __init free_low_memory_core_early(void)phys_addr_t start, end;u64 i; +memblock_clear_hotplug (0 ,ULLONG_MAX ); +for_each_free_mem_range (i,NUMA_NO_NODE , &start, &end,NULL ) count +=__free_memory_core (start, end);
-- 1.7.1
.