summaryrefslogtreecommitdiffstats
path: root/drivers/base/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base/node.c')
-rw-r--r--drivers/base/node.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c
index c5f81fc621ac..92b00a7e6a02 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -399,7 +399,8 @@ static int __ref get_nid_for_pfn(unsigned long pfn)
399} 399}
400 400
401/* register memory section under specified node if it spans that node */ 401/* register memory section under specified node if it spans that node */
402int register_mem_sect_under_node(struct memory_block *mem_blk, int nid) 402int register_mem_sect_under_node(struct memory_block *mem_blk, int nid,
403 bool check_nid)
403{ 404{
404 int ret; 405 int ret;
405 unsigned long pfn, sect_start_pfn, sect_end_pfn; 406 unsigned long pfn, sect_start_pfn, sect_end_pfn;
@@ -425,11 +426,18 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)
425 continue; 426 continue;
426 } 427 }
427 428
428 page_nid = get_nid_for_pfn(pfn); 429 /*
429 if (page_nid < 0) 430 * We need to check if page belongs to nid only for the boot
430 continue; 431 * case, during hotplug we know that all pages in the memory
431 if (page_nid != nid) 432 * block belong to the same node.
432 continue; 433 */
434 if (check_nid) {
435 page_nid = get_nid_for_pfn(pfn);
436 if (page_nid < 0)
437 continue;
438 if (page_nid != nid)
439 continue;
440 }
433 ret = sysfs_create_link_nowarn(&node_devices[nid]->dev.kobj, 441 ret = sysfs_create_link_nowarn(&node_devices[nid]->dev.kobj,
434 &mem_blk->dev.kobj, 442 &mem_blk->dev.kobj,
435 kobject_name(&mem_blk->dev.kobj)); 443 kobject_name(&mem_blk->dev.kobj));
@@ -504,7 +512,7 @@ int link_mem_sections(int nid, unsigned long start_pfn, unsigned long nr_pages)
504 512
505 mem_blk = find_memory_block_hinted(mem_sect, mem_blk); 513 mem_blk = find_memory_block_hinted(mem_sect, mem_blk);
506 514
507 ret = register_mem_sect_under_node(mem_blk, nid); 515 ret = register_mem_sect_under_node(mem_blk, nid, true);
508 if (!err) 516 if (!err)
509 err = ret; 517 err = ret;
510 518