Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* K8 NUMA support */ |
2 | /* Copyright 2002,2003 by Andi Kleen, SuSE Labs */ | |
3 | /* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */ | |
4 | #ifndef _ASM_X86_64_MMZONE_H | |
5 | #define _ASM_X86_64_MMZONE_H 1 | |
6 | ||
1da177e4 | 7 | |
2b97690f | 8 | #ifdef CONFIG_NUMA |
1da177e4 LT |
9 | |
10 | #define VIRTUAL_BUG_ON(x) | |
11 | ||
12 | #include <asm/smp.h> | |
13 | ||
1da177e4 | 14 | /* Simple perfect hash to map physical addresses to node numbers */ |
dcf36bfa ED |
15 | struct memnode { |
16 | int shift; | |
076422d2 AS |
17 | unsigned int mapsize; |
18 | u8 *map; | |
19 | u8 embedded_map[64-16]; | |
20 | } ____cacheline_aligned; /* total size = 64 bytes */ | |
dcf36bfa ED |
21 | extern struct memnode memnode; |
22 | #define memnode_shift memnode.shift | |
23 | #define memnodemap memnode.map | |
076422d2 | 24 | #define memnodemapsize memnode.mapsize |
1da177e4 LT |
25 | |
26 | extern struct pglist_data *node_data[]; | |
27 | ||
28 | static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) | |
29 | { | |
e90f22ed | 30 | unsigned nid; |
076422d2 AS |
31 | VIRTUAL_BUG_ON(!memnodemap); |
32 | VIRTUAL_BUG_ON((addr >> memnode_shift) >= memnodemapsize); | |
1da177e4 | 33 | nid = memnodemap[addr >> memnode_shift]; |
e90f22ed | 34 | VIRTUAL_BUG_ON(nid >= MAX_NUMNODES || !node_data[nid]); |
1da177e4 LT |
35 | return nid; |
36 | } | |
37 | ||
1da177e4 LT |
38 | #define NODE_DATA(nid) (node_data[nid]) |
39 | ||
1da177e4 LT |
40 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
41 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \ | |
42 | NODE_DATA(nid)->node_spanned_pages) | |
43 | ||
2b97690f | 44 | #ifdef CONFIG_DISCONTIGMEM |
2b97690f | 45 | #define pfn_to_nid(pfn) phys_to_nid((unsigned long)(pfn) << PAGE_SHIFT) |
1da177e4 | 46 | |
cf050132 | 47 | extern int pfn_valid(unsigned long pfn); |
1da177e4 | 48 | #endif |
2b97690f | 49 | |
53fee04f RS |
50 | #ifdef CONFIG_NUMA_EMU |
51 | #define FAKE_NODE_MIN_SIZE (64*1024*1024) | |
52 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1ul)) | |
53 | #endif | |
54 | ||
2b97690f | 55 | #endif |
1da177e4 | 56 | #endif |