[PATCH] hot-add-mem x86_64: memory_add_physaddr_to_nid enable
The api for hot-add memory already has a construct for finding nodes based on an address, memory_add_physaddr_to_nid. This patch allows the fucntion to do something besides return 0. It uses the nodes_add infomation to lookup to node info for a hot add event. Signed-off-by: Keith Mannthey <kmannth@us.ibm.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Andi Kleen <ak@muc.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
71efa8fdc5
commit
4942e998b4
2 changed files with 19 additions and 14 deletions
|
@ -462,19 +462,6 @@ void online_page(struct page *page)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
/*
|
||||
* XXX: memory_add_physaddr_to_nid() is to find node id from physical address
|
||||
* via probe interface of sysfs. If acpi notifies hot-add event, then it
|
||||
* can tell node id by searching dsdt. But, probe interface doesn't have
|
||||
* node id. So, return 0 as node id at this time.
|
||||
*/
|
||||
#ifdef CONFIG_NUMA
|
||||
int memory_add_physaddr_to_nid(u64 start)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Memory is added always to NORMAL zone. This means you will never get
|
||||
* additional DMA/DMA32 memory.
|
||||
|
@ -506,6 +493,13 @@ int remove_memory(u64 start, u64 size)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(remove_memory);
|
||||
|
||||
#ifndef CONFIG_ACPI_NUMA
|
||||
int memory_add_physaddr_to_nid(u64 start)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_MEMORY_HOTPLUG */
|
||||
/*
|
||||
* Memory Hotadd without sparsemem. The mem_maps have been allocated in advance,
|
||||
|
|
|
@ -27,7 +27,7 @@ static struct acpi_table_slit *acpi_slit;
|
|||
|
||||
static nodemask_t nodes_parsed __initdata;
|
||||
static struct bootnode nodes[MAX_NUMNODES] __initdata;
|
||||
static struct bootnode nodes_add[MAX_NUMNODES] __initdata;
|
||||
static struct bootnode nodes_add[MAX_NUMNODES];
|
||||
static int found_add_area __initdata;
|
||||
int hotadd_percent __initdata = 0;
|
||||
|
||||
|
@ -466,3 +466,14 @@ int __node_distance(int a, int b)
|
|||
}
|
||||
|
||||
EXPORT_SYMBOL(__node_distance);
|
||||
|
||||
int memory_add_physaddr_to_nid(u64 start)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
||||
for_each_node(i)
|
||||
if (nodes_add[i].start <= start && nodes_add[i].end > start)
|
||||
ret = i;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue