memory hotplug: avoid double registration on ia64 platform
Subsystems (2)
PATCH 1/1 memory hotplug: avoid double registration on ia64 platform
From: Xishi Qiu <[email protected]>
Hi all,
There may be have a bug when register section info. For example, on an Itanium platform, the pfn range of node0 includes the other nodes. So when hot remove memory, we can't free the memmap's page because page_count() is 2 after put_page_bootmem().
sparse_remove_one_section()->free_section_usemap()->free_map_bootmem() ->put_page_bootmem()
pgdat0: start_pfn=0x100, spanned_pfn=0x20fb00, present_pfn=0x7f8a3, => 0x100-0x20fc00
pgdat1: start_pfn=0x80000, spanned_pfn=0x80000, present_pfn=0x80000, => 0x80000-0x100000
pgdat2: start_pfn=0x100000, spanned_pfn=0x80000, present_pfn=0x80000, => 0x100000-0x180000
pgdat3: start_pfn=0x180000, spanned_pfn=0x80000, present_pfn=0x80000, => 0x180000-0x200000
--- mm/memory_hotplug.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-)
mm/memory_hotplug.c +4 -6
@@ -126,9 +126,6 @@ static void register_page_bootmem_info_section(unsigned long start_pfn)struct mem_section *ms;struct page *page, *memmap; -if (!pfn_valid (start_pfn)) -return ; - section_nr =pfn_to_section_nr (start_pfn); ms =__nr_to_section (section_nr);
@@ -187,9 +184,10 @@ void register_page_bootmem_info_node(struct pglist_data *pgdat) end_pfn = pfn + pgdat->node_spanned_pages;/* register_section info */ -for (; pfn < end_pfn; pfn +=PAGES_PER_SECTION ) - register_page_bootmem_info_section(pfn); - +for (; pfn < end_pfn; pfn +=PAGES_PER_SECTION ) { +if (pfn_valid (pfn) && (pfn_to_nid (pfn) == node)) +register_page_bootmem_info_section (pfn); + } }#endif /* !CONFIG_SPARSEMEM_VMEMMAP */
-- 1.7.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 17 lines · qiuxishi
From: Xishi Qiu <[email protected]>
Hi all,
There may be have a bug when register section info. For example, on an Itanium platform, the pfn range of node0 includes the other nodes. So when hot remove memory, we can't free the memmap's page becausepage_count()is 2 afterput_page_bootmem().sparse_remove_one_section()->free_section_usemap()->free_map_bootmem() ->put_page_bootmem()
pgdat0: start_pfn=0x100, spanned_pfn=0x20fb00, present_pfn=0x7f8a3, => 0x100-0x20fc00
pgdat1: start_pfn=0x80000, spanned_pfn=0x80000, present_pfn=0x80000, => 0x80000-0x100000
pgdat2: start_pfn=0x100000, spanned_pfn=0x80000, present_pfn=0x80000, => 0x100000-0x180000
pgdat3: start_pfn=0x180000, spanned_pfn=0x80000, present_pfn=0x80000, => 0x180000-0x200000
Quoted 4 lines
Signed-off-by Xishi Qiu <[email protected]>--- mm/memory_hotplug.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-)
<formletter>
This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read Documentation/stable_kernel_rules.txt for how to do this properly.
</formletter>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>