[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: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
40caa88465
commit
dcf36bfa5d
2 changed files with 9 additions and 6 deletions
|
@ -25,8 +25,7 @@
|
|||
struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
|
||||
bootmem_data_t plat_node_bdata[MAX_NUMNODES];
|
||||
|
||||
int memnode_shift;
|
||||
u8 memnodemap[NODEMAPSIZE];
|
||||
struct memnode memnode;
|
||||
|
||||
unsigned char cpu_to_node[NR_CPUS] __read_mostly = {
|
||||
[0 ... NR_CPUS-1] = NUMA_NO_NODE
|
||||
|
@ -367,8 +366,7 @@ void __init init_cpu_to_node(void)
|
|||
|
||||
EXPORT_SYMBOL(cpu_to_node);
|
||||
EXPORT_SYMBOL(node_to_cpumask);
|
||||
EXPORT_SYMBOL(memnode_shift);
|
||||
EXPORT_SYMBOL(memnodemap);
|
||||
EXPORT_SYMBOL(memnode);
|
||||
EXPORT_SYMBOL(node_data);
|
||||
|
||||
#ifdef CONFIG_DISCONTIGMEM
|
||||
|
|
|
@ -15,8 +15,13 @@
|
|||
#define NODEMAPSIZE 0xfff
|
||||
|
||||
/* Simple perfect hash to map physical addresses to node numbers */
|
||||
extern int memnode_shift;
|
||||
extern u8 memnodemap[NODEMAPSIZE];
|
||||
struct memnode {
|
||||
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[];
|
||||
|
||||
|
|
Loading…
Reference in a new issue