Skip to content
  • qiuxishi's avatar
    memory hotplug: fix section info double registration bug · 967c0e4a
    qiuxishi authored
    
    
    commit f14851af0ebb32745c6c5a2e400aa0549f9d20df upstream.
    
    There may be a bug when registering section info.  For example, on my
    Itanium platform, the pfn range of node0 includes the other nodes, so
    other nodes' section info will be double registered, and memmap's page
    count will equal to 3.
    
      node0: start_pfn=0x100,    spanned_pfn=0x20fb00, present_pfn=0x7f8a3, => 0x000100-0x20fc00
      node1: start_pfn=0x80000,  spanned_pfn=0x80000,  present_pfn=0x80000, => 0x080000-0x100000
      node2: start_pfn=0x100000, spanned_pfn=0x80000,  present_pfn=0x80000, => 0x100000-0x180000
      node3: start_pfn=0x180000, spanned_pfn=0x80000,  present_pfn=0x80000, => 0x180000-0x200000
    
      free_all_bootmem_node()
    	register_page_bootmem_info_node()
    		register_page_bootmem_info_section()
    
    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()
    
    [akpm@linux-foundation.org: add code comment]
    Signed-off-by: default avatarXishi Qiu <qiuxishi@huawei.com>
    Signed-off-by: default avatarJiang Liu <jiang.liu@huawei.com>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Cc: "Luck, Tony" <tony.luck@intel.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    967c0e4a