diff options
Diffstat (limited to 'drivers/base/node.c')
| -rw-r--r-- | drivers/base/node.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 36b43052001d..b3b72d64e805 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -375,8 +375,10 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)  		return -EFAULT;  	if (!node_online(nid))  		return 0; -	sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index); -	sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1; + +	sect_start_pfn = section_nr_to_pfn(mem_blk->start_section_nr); +	sect_end_pfn = section_nr_to_pfn(mem_blk->end_section_nr); +	sect_end_pfn += PAGES_PER_SECTION - 1;  	for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {  		int page_nid; @@ -400,7 +402,8 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)  }  /* unregister memory section under all nodes that it spans */ -int unregister_mem_sect_under_nodes(struct memory_block *mem_blk) +int unregister_mem_sect_under_nodes(struct memory_block *mem_blk, +				    unsigned long phys_index)  {  	NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);  	unsigned long pfn, sect_start_pfn, sect_end_pfn; @@ -412,7 +415,8 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)  	if (!unlinked_nodes)  		return -ENOMEM;  	nodes_clear(*unlinked_nodes); -	sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index); + +	sect_start_pfn = section_nr_to_pfn(phys_index);  	sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;  	for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {  		int nid;  | 
