73e5745aef34ad7bf23061401b5719a925896b89
[deliverable/linux.git] / arch / x86 / include / asm / mmzone_32.h
1 /*
2 * Written by Pat Gaughen (gone@us.ibm.com) Mar 2002
3 *
4 */
5
6 #ifndef _ASM_X86_MMZONE_32_H
7 #define _ASM_X86_MMZONE_32_H
8
9 #include <asm/smp.h>
10
11 #ifdef CONFIG_NUMA
12 extern struct pglist_data *node_data[];
13 #define NODE_DATA(nid) (node_data[nid])
14
15 #include <asm/numaq.h>
16 /* summit or generic arch */
17 #include <asm/srat.h>
18
19 extern void resume_map_numa_kva(pgd_t *pgd);
20
21 #else /* !CONFIG_NUMA */
22
23 static inline void resume_map_numa_kva(pgd_t *pgd) {}
24
25 #endif /* CONFIG_NUMA */
26
27 #ifdef CONFIG_DISCONTIGMEM
28
29 /*
30 * generic node memory support, the following assumptions apply:
31 *
32 * 1) memory comes in 64Mb contiguous chunks which are either present or not
33 * 2) we will not have more than 64Gb in total
34 *
35 * for now assume that 64Gb is max amount of RAM for whole system
36 * 64Gb / 4096bytes/page = 16777216 pages
37 */
38 #define MAX_NR_PAGES 16777216
39 #define MAX_ELEMENTS 1024
40 #define PAGES_PER_ELEMENT (MAX_NR_PAGES/MAX_ELEMENTS)
41
42 extern s8 physnode_map[];
43
44 static inline int pfn_to_nid(unsigned long pfn)
45 {
46 #ifdef CONFIG_NUMA
47 return((int) physnode_map[(pfn) / PAGES_PER_ELEMENT]);
48 #else
49 return 0;
50 #endif
51 }
52
53 /*
54 * Following are macros that each numa implmentation must define.
55 */
56
57 #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
58 #define node_end_pfn(nid) \
59 ({ \
60 pg_data_t *__pgdat = NODE_DATA(nid); \
61 __pgdat->node_start_pfn + __pgdat->node_spanned_pages; \
62 })
63
64 static inline int pfn_valid(int pfn)
65 {
66 int nid = pfn_to_nid(pfn);
67
68 if (nid >= 0)
69 return (pfn < node_end_pfn(nid));
70 return 0;
71 }
72
73 #endif /* CONFIG_DISCONTIGMEM */
74
75 #ifdef CONFIG_NEED_MULTIPLE_NODES
76 /* always use node 0 for bootmem on this numa platform */
77 #define bootmem_arch_preferred_node(__bdata, size, align, goal, limit) \
78 (NODE_DATA(0)->bdata)
79 #endif /* CONFIG_NEED_MULTIPLE_NODES */
80
81 #endif /* _ASM_X86_MMZONE_32_H */
This page took 0.032394 seconds and 4 git commands to generate.