Commit 4323838215184f5a2f081e0d17b8d60731b03164

Authored by travis@sgi.com
Committed by Ingo Molnar
1 parent 409a7b859d

x86: change size of node ids from u8 to s16

Change the size of node ids for X86_64 from u8 to s16 to
accomodate more than 32k nodes and allow for NUMA_NO_NODE
(-1) to be sign extended to int.

Cc: David Rientjes <rientjes@google.com>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: Mike Travis <travis@sgi.com>
Reviewed-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Showing 5 changed files with 16 additions and 15 deletions Side-by-side Diff

... ... @@ -848,6 +848,7 @@
848 848  
849 849 config NODES_SHIFT
850 850 int
  851 + range 1 15 if X86_64
851 852 default "6" if X86_64
852 853 default "4" if X86_NUMAQ
853 854 default "3"
arch/x86/mm/numa_64.c
... ... @@ -31,15 +31,15 @@
31 31  
32 32 struct memnode memnode;
33 33  
34   -u16 x86_cpu_to_node_map_init[NR_CPUS] = {
  34 +int x86_cpu_to_node_map_init[NR_CPUS] = {
35 35 [0 ... NR_CPUS-1] = NUMA_NO_NODE
36 36 };
37 37 void *x86_cpu_to_node_map_early_ptr;
38   -DEFINE_PER_CPU(u16, x86_cpu_to_node_map) = NUMA_NO_NODE;
  38 +DEFINE_PER_CPU(int, x86_cpu_to_node_map) = NUMA_NO_NODE;
39 39 EXPORT_PER_CPU_SYMBOL(x86_cpu_to_node_map);
40 40 EXPORT_SYMBOL(x86_cpu_to_node_map_early_ptr);
41 41  
42   -u16 apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = {
  42 +s16 apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = {
43 43 [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
44 44 };
45 45  
... ... @@ -63,7 +63,7 @@
63 63 unsigned long addr, end;
64 64 int i, res = -1;
65 65  
66   - memset(memnodemap, 0xff, memnodemapsize);
  66 + memset(memnodemap, 0xff, sizeof(s16)*memnodemapsize);
67 67 for (i = 0; i < numnodes; i++) {
68 68 addr = nodes[i].start;
69 69 end = nodes[i].end;
... ... @@ -72,7 +72,7 @@
72 72 if ((end >> shift) >= memnodemapsize)
73 73 return 0;
74 74 do {
75   - if (memnodemap[addr >> shift] != 0xff)
  75 + if (memnodemap[addr >> shift] != NUMA_NO_NODE)
76 76 return -1;
77 77 memnodemap[addr >> shift] = i;
78 78 addr += (1UL << shift);
... ... @@ -533,7 +533,7 @@
533 533  
534 534 void __cpuinit numa_set_node(int cpu, int node)
535 535 {
536   - u16 *cpu_to_node_map = x86_cpu_to_node_map_early_ptr;
  536 + int *cpu_to_node_map = x86_cpu_to_node_map_early_ptr;
537 537  
538 538 cpu_pda(cpu)->nodenumber = node;
539 539  
include/asm-x86/mmzone_64.h
... ... @@ -15,9 +15,9 @@
15 15 struct memnode {
16 16 int shift;
17 17 unsigned int mapsize;
18   - u8 *map;
19   - u8 embedded_map[64-16];
20   -} ____cacheline_aligned; /* total size = 64 bytes */
  18 + s16 *map;
  19 + s16 embedded_map[64-8];
  20 +} ____cacheline_aligned; /* total size = 128 bytes */
21 21 extern struct memnode memnode;
22 22 #define memnode_shift memnode.shift
23 23 #define memnodemap memnode.map
include/asm-x86/numa_64.h
... ... @@ -20,7 +20,7 @@
20 20 extern void srat_reserve_add_area(int nodeid);
21 21 extern int hotadd_percent;
22 22  
23   -extern u16 apicid_to_node[MAX_LOCAL_APIC];
  23 +extern s16 apicid_to_node[MAX_LOCAL_APIC];
24 24  
25 25 extern void numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn);
26 26 extern unsigned long numa_free_all_bootmem(void);
include/asm-x86/topology.h
... ... @@ -31,11 +31,11 @@
31 31  
32 32 /* Mappings between logical cpu number and node number */
33 33 #ifdef CONFIG_X86_32
34   -extern u8 cpu_to_node_map[];
  34 +extern int cpu_to_node_map[];
35 35  
36 36 #else
37   -DECLARE_PER_CPU(u16, x86_cpu_to_node_map);
38   -extern u16 x86_cpu_to_node_map_init[];
  37 +DECLARE_PER_CPU(int, x86_cpu_to_node_map);
  38 +extern int x86_cpu_to_node_map_init[];
39 39 extern void *x86_cpu_to_node_map_early_ptr;
40 40 /* Returns the number of the current Node. */
41 41 #define numa_node_id() (early_cpu_to_node(raw_smp_processor_id()))
... ... @@ -43,7 +43,7 @@
43 43  
44 44 extern cpumask_t node_to_cpumask_map[];
45 45  
46   -#define NUMA_NO_NODE ((u16)(~0))
  46 +#define NUMA_NO_NODE (-1)
47 47  
48 48 /* Returns the number of the node containing CPU 'cpu' */
49 49 #ifdef CONFIG_X86_32
... ... @@ -56,7 +56,7 @@
56 56 #else /* CONFIG_X86_64 */
57 57 static inline int early_cpu_to_node(int cpu)
58 58 {
59   - u16 *cpu_to_node_map = x86_cpu_to_node_map_early_ptr;
  59 + int *cpu_to_node_map = x86_cpu_to_node_map_early_ptr;
60 60  
61 61 if (cpu_to_node_map)
62 62 return cpu_to_node_map[cpu];