diff options
Diffstat (limited to 'drivers/base/node.c')
-rw-r--r-- | drivers/base/node.c | 22 |
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 */ |
402 | int register_mem_sect_under_node(struct memory_block *mem_blk, int nid) | 402 | int 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 | ||