diff options
Diffstat (limited to 'include/asm-ppc64/mmzone.h')
-rw-r--r-- | include/asm-ppc64/mmzone.h | 65 |
1 files changed, 5 insertions, 60 deletions
diff --git a/include/asm-ppc64/mmzone.h b/include/asm-ppc64/mmzone.h index 80a708e7093a..54958d6cae04 100644 --- a/include/asm-ppc64/mmzone.h +++ b/include/asm-ppc64/mmzone.h | |||
@@ -8,15 +8,14 @@ | |||
8 | #define _ASM_MMZONE_H_ | 8 | #define _ASM_MMZONE_H_ |
9 | 9 | ||
10 | #include <linux/config.h> | 10 | #include <linux/config.h> |
11 | #include <asm/smp.h> | ||
12 | 11 | ||
13 | /* generic non-linear memory support: | 12 | /* |
13 | * generic non-linear memory support: | ||
14 | * | 14 | * |
15 | * 1) we will not split memory into more chunks than will fit into the | 15 | * 1) we will not split memory into more chunks than will fit into the |
16 | * flags field of the struct page | 16 | * flags field of the struct page |
17 | */ | 17 | */ |
18 | 18 | ||
19 | |||
20 | #ifdef CONFIG_NEED_MULTIPLE_NODES | 19 | #ifdef CONFIG_NEED_MULTIPLE_NODES |
21 | 20 | ||
22 | extern struct pglist_data *node_data[]; | 21 | extern struct pglist_data *node_data[]; |
@@ -30,36 +29,11 @@ extern struct pglist_data *node_data[]; | |||
30 | */ | 29 | */ |
31 | 30 | ||
32 | extern int numa_cpu_lookup_table[]; | 31 | extern int numa_cpu_lookup_table[]; |
33 | extern char *numa_memory_lookup_table; | ||
34 | extern cpumask_t numa_cpumask_lookup_table[]; | 32 | extern cpumask_t numa_cpumask_lookup_table[]; |
35 | extern int nr_cpus_in_node[]; | 33 | #ifdef CONFIG_MEMORY_HOTPLUG |
36 | 34 | extern unsigned long max_pfn; | |
37 | /* 16MB regions */ | ||
38 | #define MEMORY_INCREMENT_SHIFT 24 | ||
39 | #define MEMORY_INCREMENT (1UL << MEMORY_INCREMENT_SHIFT) | ||
40 | |||
41 | /* NUMA debugging, will not work on a DLPAR machine */ | ||
42 | #undef DEBUG_NUMA | ||
43 | |||
44 | static inline int pa_to_nid(unsigned long pa) | ||
45 | { | ||
46 | int nid; | ||
47 | |||
48 | nid = numa_memory_lookup_table[pa >> MEMORY_INCREMENT_SHIFT]; | ||
49 | |||
50 | #ifdef DEBUG_NUMA | ||
51 | /* the physical address passed in is not in the map for the system */ | ||
52 | if (nid == -1) { | ||
53 | printk("bad address: %lx\n", pa); | ||
54 | BUG(); | ||
55 | } | ||
56 | #endif | 35 | #endif |
57 | 36 | ||
58 | return nid; | ||
59 | } | ||
60 | |||
61 | #define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn) | ||
62 | |||
63 | /* | 37 | /* |
64 | * Following are macros that each numa implmentation must define. | 38 | * Following are macros that each numa implmentation must define. |
65 | */ | 39 | */ |
@@ -67,39 +41,10 @@ static inline int pa_to_nid(unsigned long pa) | |||
67 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 41 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
68 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn) | 42 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn) |
69 | 43 | ||
70 | #ifdef CONFIG_DISCONTIGMEM | ||
71 | |||
72 | /* | ||
73 | * Given a kernel address, find the home node of the underlying memory. | ||
74 | */ | ||
75 | #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) | ||
76 | |||
77 | #define pfn_to_nid(pfn) pa_to_nid((unsigned long)(pfn) << PAGE_SHIFT) | ||
78 | |||
79 | /* Written this way to avoid evaluating arguments twice */ | ||
80 | #define discontigmem_pfn_to_page(pfn) \ | ||
81 | ({ \ | ||
82 | unsigned long __tmp = pfn; \ | ||
83 | (NODE_DATA(pfn_to_nid(__tmp))->node_mem_map + \ | ||
84 | node_localnr(__tmp, pfn_to_nid(__tmp))); \ | ||
85 | }) | ||
86 | |||
87 | #define discontigmem_page_to_pfn(p) \ | ||
88 | ({ \ | ||
89 | struct page *__tmp = p; \ | ||
90 | (((__tmp) - page_zone(__tmp)->zone_mem_map) + \ | ||
91 | page_zone(__tmp)->zone_start_pfn); \ | ||
92 | }) | ||
93 | |||
94 | /* XXX fix for discontiguous physical memory */ | ||
95 | #define discontigmem_pfn_valid(pfn) ((pfn) < num_physpages) | ||
96 | |||
97 | #endif /* CONFIG_DISCONTIGMEM */ | ||
98 | |||
99 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ | 44 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ |
100 | 45 | ||
101 | #ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | 46 | #ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID |
102 | #define early_pfn_to_nid(pfn) pa_to_nid(((unsigned long)pfn) << PAGE_SHIFT) | 47 | extern int __init early_pfn_to_nid(unsigned long pfn); |
103 | #endif | 48 | #endif |
104 | 49 | ||
105 | #endif /* _ASM_MMZONE_H_ */ | 50 | #endif /* _ASM_MMZONE_H_ */ |