Commit dcf36bfa authored by Eric Dumazet's avatar Eric Dumazet Committed by Linus Torvalds

[PATCH] x86_64: group memnodemap and memnodeshift in a memnode structure

pfn_to_page() and others need to access both memnode_shift and the very
first bytes of memnodemap[]. If we force memnode_shift to be just before the
memnodemap array, we can reduce the memory footprint to one cache line
instead of two for most setups. This patch introduce a 'memnode' structure
where shift and map[] are carefully placed.
Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 40caa884
...@@ -25,8 +25,7 @@ ...@@ -25,8 +25,7 @@
struct pglist_data *node_data[MAX_NUMNODES] __read_mostly; struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
bootmem_data_t plat_node_bdata[MAX_NUMNODES]; bootmem_data_t plat_node_bdata[MAX_NUMNODES];
int memnode_shift; struct memnode memnode;
u8 memnodemap[NODEMAPSIZE];
unsigned char cpu_to_node[NR_CPUS] __read_mostly = { unsigned char cpu_to_node[NR_CPUS] __read_mostly = {
[0 ... NR_CPUS-1] = NUMA_NO_NODE [0 ... NR_CPUS-1] = NUMA_NO_NODE
...@@ -367,8 +366,7 @@ void __init init_cpu_to_node(void) ...@@ -367,8 +366,7 @@ void __init init_cpu_to_node(void)
EXPORT_SYMBOL(cpu_to_node); EXPORT_SYMBOL(cpu_to_node);
EXPORT_SYMBOL(node_to_cpumask); EXPORT_SYMBOL(node_to_cpumask);
EXPORT_SYMBOL(memnode_shift); EXPORT_SYMBOL(memnode);
EXPORT_SYMBOL(memnodemap);
EXPORT_SYMBOL(node_data); EXPORT_SYMBOL(node_data);
#ifdef CONFIG_DISCONTIGMEM #ifdef CONFIG_DISCONTIGMEM
......
...@@ -15,8 +15,13 @@ ...@@ -15,8 +15,13 @@
#define NODEMAPSIZE 0xfff #define NODEMAPSIZE 0xfff
/* Simple perfect hash to map physical addresses to node numbers */ /* Simple perfect hash to map physical addresses to node numbers */
extern int memnode_shift; struct memnode {
extern u8 memnodemap[NODEMAPSIZE]; int shift;
u8 map[NODEMAPSIZE];
} ____cacheline_aligned;
extern struct memnode memnode;
#define memnode_shift memnode.shift
#define memnodemap memnode.map
extern struct pglist_data *node_data[]; extern struct pglist_data *node_data[];
......
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