x86, NUMA: Unify 32/64bit numa_cpu_node() implementation
Currently, the only meaningful user of apic->x86_32_numa_cpu_node() is NUMAQ which returns valid mapping only after CPU is initialized during SMP bringup; thus, the previous patch to set apicid -> node in setup_local_APIC() makes __apicid_to_node[] always contain the correct mapping whether custom apic->x86_32_numa_cpu_node() is used or not. So, there is no reason to keep separate 32bit implementation. We can always consult __apicid_to_node[]. Move 64bit implementation from numa_64.c to numa.c and remove 32bit implementation from numa_32.c. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Yinghai Lu <yinghai@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com>
This commit is contained in:
parent
c4b90c1199
commit
6bd262731b
|
@ -1,6 +1,8 @@
|
||||||
#ifndef _ASM_X86_NUMA_H
|
#ifndef _ASM_X86_NUMA_H
|
||||||
#define _ASM_X86_NUMA_H
|
#define _ASM_X86_NUMA_H
|
||||||
|
|
||||||
|
#include <linux/nodemask.h>
|
||||||
|
|
||||||
#include <asm/topology.h>
|
#include <asm/topology.h>
|
||||||
#include <asm/apicdef.h>
|
#include <asm/apicdef.h>
|
||||||
|
|
||||||
|
@ -22,10 +24,18 @@ static inline void set_apicid_to_node(int apicid, s16 node)
|
||||||
{
|
{
|
||||||
__apicid_to_node[apicid] = node;
|
__apicid_to_node[apicid] = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int __cpuinit numa_cpu_node(int cpu);
|
||||||
|
|
||||||
#else /* CONFIG_NUMA */
|
#else /* CONFIG_NUMA */
|
||||||
static inline void set_apicid_to_node(int apicid, s16 node)
|
static inline void set_apicid_to_node(int apicid, s16 node)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int numa_cpu_node(int cpu)
|
||||||
|
{
|
||||||
|
return NUMA_NO_NODE;
|
||||||
|
}
|
||||||
#endif /* CONFIG_NUMA */
|
#endif /* CONFIG_NUMA */
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
|
|
|
@ -5,12 +5,6 @@ extern int numa_off;
|
||||||
|
|
||||||
extern int pxm_to_nid(int pxm);
|
extern int pxm_to_nid(int pxm);
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
|
||||||
extern int __cpuinit numa_cpu_node(int cpu);
|
|
||||||
#else /* CONFIG_NUMA */
|
|
||||||
static inline int numa_cpu_node(int cpu) { return NUMA_NO_NODE; }
|
|
||||||
#endif /* CONFIG_NUMA */
|
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
extern void set_highmem_pages_init(void);
|
extern void set_highmem_pages_init(void);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -26,7 +26,6 @@ extern void setup_node_bootmem(int nodeid, unsigned long start,
|
||||||
|
|
||||||
extern nodemask_t numa_nodes_parsed __initdata;
|
extern nodemask_t numa_nodes_parsed __initdata;
|
||||||
|
|
||||||
extern int __cpuinit numa_cpu_node(int cpu);
|
|
||||||
extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
|
extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
|
||||||
extern void __init numa_set_distance(int from, int to, int distance);
|
extern void __init numa_set_distance(int from, int to, int distance);
|
||||||
|
|
||||||
|
@ -35,8 +34,6 @@ extern void __init numa_set_distance(int from, int to, int distance);
|
||||||
#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 *);
|
||||||
#endif /* CONFIG_NUMA_EMU */
|
#endif /* CONFIG_NUMA_EMU */
|
||||||
#else
|
|
||||||
static inline int numa_cpu_node(int cpu) { return NUMA_NO_NODE; }
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_X86_NUMA_64_H */
|
#endif /* _ASM_X86_NUMA_64_H */
|
||||||
|
|
|
@ -32,6 +32,15 @@ s16 __apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = {
|
||||||
[0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
|
[0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int __cpuinit numa_cpu_node(int cpu)
|
||||||
|
{
|
||||||
|
int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
|
||||||
|
|
||||||
|
if (apicid != BAD_APICID)
|
||||||
|
return __apicid_to_node[apicid];
|
||||||
|
return NUMA_NO_NODE;
|
||||||
|
}
|
||||||
|
|
||||||
cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
|
cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
|
||||||
EXPORT_SYMBOL(node_to_cpumask_map);
|
EXPORT_SYMBOL(node_to_cpumask_map);
|
||||||
|
|
||||||
|
|
|
@ -107,11 +107,6 @@ extern unsigned long highend_pfn, highstart_pfn;
|
||||||
static void *node_remap_start_vaddr[MAX_NUMNODES];
|
static void *node_remap_start_vaddr[MAX_NUMNODES];
|
||||||
void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags);
|
void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags);
|
||||||
|
|
||||||
int __cpuinit numa_cpu_node(int cpu)
|
|
||||||
{
|
|
||||||
return apic->x86_32_numa_cpu_node(cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FLAT - support for basic PC memory model with discontig enabled, essentially
|
* FLAT - support for basic PC memory model with discontig enabled, essentially
|
||||||
* a single node with all available processors in it with a flat
|
* a single node with all available processors in it with a flat
|
||||||
|
|
|
@ -512,15 +512,6 @@ unsigned long __init numa_free_all_bootmem(void)
|
||||||
return pages;
|
return pages;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __cpuinit numa_cpu_node(int cpu)
|
|
||||||
{
|
|
||||||
int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
|
|
||||||
|
|
||||||
if (apicid != BAD_APICID)
|
|
||||||
return __apicid_to_node[apicid];
|
|
||||||
return NUMA_NO_NODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||||
int memory_add_physaddr_to_nid(u64 start)
|
int memory_add_physaddr_to_nid(u64 start)
|
||||||
{
|
{
|
||||||
|
|
Reference in New Issue