Commit a844ef46 authored by Tejun Heo's avatar Tejun Heo

x86-64, NUMA: Add common find_node_by_addr()

srat_64.c and amdtopology_64.c had their own versions of
find_node_by_addr() which were basically the same.  Add common one in
numa_64.c and remove the duplicates.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Shaohui Zheng <shaohui.zheng@intel.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: H. Peter Anvin <hpa@linux.intel.com>
parent 56e827fb
...@@ -35,6 +35,7 @@ extern int __init numa_add_memblk(int nodeid, u64 start, u64 end); ...@@ -35,6 +35,7 @@ extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
#define FAKE_NODE_MIN_SIZE ((u64)32 << 20) #define FAKE_NODE_MIN_SIZE ((u64)32 << 20)
#define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL))
void numa_emu_cmdline(char *); void numa_emu_cmdline(char *);
int __init find_node_by_addr(unsigned long addr);
#endif /* CONFIG_NUMA_EMU */ #endif /* CONFIG_NUMA_EMU */
#else #else
static inline int numa_cpu_node(int cpu) { return NUMA_NO_NODE; } static inline int numa_cpu_node(int cpu) { return NUMA_NO_NODE; }
......
...@@ -205,19 +205,6 @@ static s16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = { ...@@ -205,19 +205,6 @@ static s16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = {
[0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
}; };
static int __init find_node_by_addr(unsigned long addr)
{
int ret = NUMA_NO_NODE;
int i;
for (i = 0; i < 8; i++)
if (addr >= numa_nodes[i].start && addr < numa_nodes[i].end) {
ret = i;
break;
}
return ret;
}
/* /*
* For NUMA emulation, fake proximity domain (_PXM) to node id mappings must be * For NUMA emulation, fake proximity domain (_PXM) to node id mappings must be
* setup to represent the physical topology but reflect the emulated * setup to represent the physical topology but reflect the emulated
......
...@@ -430,6 +430,25 @@ void __init numa_emu_cmdline(char *str) ...@@ -430,6 +430,25 @@ void __init numa_emu_cmdline(char *str)
cmdline = str; cmdline = str;
} }
int __init find_node_by_addr(unsigned long addr)
{
int ret = NUMA_NO_NODE;
int i;
for_each_node_mask(i, mem_nodes_parsed) {
/*
* Find the real node that this emulated node appears on. For
* the sake of simplicity, we only use a real node's starting
* address to determine which emulated node it appears on.
*/
if (addr >= numa_nodes[i].start && addr < numa_nodes[i].end) {
ret = i;
break;
}
}
return ret;
}
static int __init setup_physnodes(unsigned long start, unsigned long end) static int __init setup_physnodes(unsigned long start, unsigned long end)
{ {
int ret = 0; int ret = 0;
......
...@@ -277,24 +277,6 @@ static int fake_node_to_pxm_map[MAX_NUMNODES] __initdata = { ...@@ -277,24 +277,6 @@ static int fake_node_to_pxm_map[MAX_NUMNODES] __initdata = {
static s16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = { static s16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = {
[0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
}; };
static int __init find_node_by_addr(unsigned long addr)
{
int ret = NUMA_NO_NODE;
int i;
for_each_node_mask(i, mem_nodes_parsed) {
/*
* Find the real node that this emulated node appears on. For
* the sake of simplicity, we only use a real node's starting
* address to determine which emulated node it appears on.
*/
if (addr >= numa_nodes[i].start && addr < numa_nodes[i].end) {
ret = i;
break;
}
}
return ret;
}
/* /*
* In NUMA emulation, we need to setup proximity domain (_PXM) to node ID * In NUMA emulation, we need to setup proximity domain (_PXM) to node ID
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment