mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 02:50:53 +07:00
driver core: Convert link_mem_sections to use find_memory_block_hinted.
Modify link_mem_sections() to pass in the previous mem_block as a hint to locating the next mem_block. Since they are typically added in order this results in a massive saving in time during boot of a very large system. For example, on a 16TB x86_64 machine, it reduced the total time spent linking all node's memory sections from 1 hour, 27 minutes to 46 seconds. Signed-off-by: Robin Holt <holt@sgi.com> To: Gary Hade <garyhade@us.ibm.com> To: Badari Pulavarty <pbadari@us.ibm.com> To: Ingo Molnar <mingo@elte.hu> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
98383031ed
commit
63d027a638
@ -409,25 +409,27 @@ static int link_mem_sections(int nid)
|
||||
unsigned long start_pfn = NODE_DATA(nid)->node_start_pfn;
|
||||
unsigned long end_pfn = start_pfn + NODE_DATA(nid)->node_spanned_pages;
|
||||
unsigned long pfn;
|
||||
struct memory_block *mem_blk = NULL;
|
||||
int err = 0;
|
||||
|
||||
for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
|
||||
unsigned long section_nr = pfn_to_section_nr(pfn);
|
||||
struct mem_section *mem_sect;
|
||||
struct memory_block *mem_blk;
|
||||
int ret;
|
||||
|
||||
if (!present_section_nr(section_nr))
|
||||
continue;
|
||||
mem_sect = __nr_to_section(section_nr);
|
||||
mem_blk = find_memory_block(mem_sect);
|
||||
mem_blk = find_memory_block_hinted(mem_sect, mem_blk);
|
||||
ret = register_mem_sect_under_node(mem_blk, nid);
|
||||
if (!err)
|
||||
err = ret;
|
||||
|
||||
/* discard ref obtained in find_memory_block() */
|
||||
kobject_put(&mem_blk->sysdev.kobj);
|
||||
}
|
||||
|
||||
if (mem_blk)
|
||||
kobject_put(&mem_blk->sysdev.kobj);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user