Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Written by Pat Gaughen (gone@us.ibm.com) Mar 2002 |
| 3 | * |
| 4 | */ |
| 5 | |
H. Peter Anvin | 1965aae | 2008-10-22 22:26:29 -0700 | [diff] [blame] | 6 | #ifndef _ASM_X86_MMZONE_32_H |
| 7 | #define _ASM_X86_MMZONE_32_H |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 | |
| 9 | #include <asm/smp.h> |
| 10 | |
Dave Jones | 8ff8b27 | 2005-07-07 17:56:39 -0700 | [diff] [blame] | 11 | #ifdef CONFIG_NUMA |
Andy Whitcroft | 05b79bd | 2005-06-23 00:07:57 -0700 | [diff] [blame] | 12 | extern struct pglist_data *node_data[]; |
| 13 | #define NODE_DATA(nid) (node_data[nid]) |
Andy Whitcroft | 05b79bd | 2005-06-23 00:07:57 -0700 | [diff] [blame] | 14 | #endif /* CONFIG_NUMA */ |
| 15 | |
| 16 | #ifdef CONFIG_DISCONTIGMEM |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 | |
| 18 | /* |
| 19 | * generic node memory support, the following assumptions apply: |
| 20 | * |
André Goddard Rosa | af901ca | 2009-11-14 13:09:05 -0200 | [diff] [blame] | 21 | * 1) memory comes in 64Mb contiguous chunks which are either present or not |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 22 | * 2) we will not have more than 64Gb in total |
| 23 | * |
| 24 | * for now assume that 64Gb is max amount of RAM for whole system |
| 25 | * 64Gb / 4096bytes/page = 16777216 pages |
| 26 | */ |
| 27 | #define MAX_NR_PAGES 16777216 |
Tejun Heo | d0ead15 | 2011-07-12 09:44:22 +0200 | [diff] [blame] | 28 | #define MAX_SECTIONS 1024 |
| 29 | #define PAGES_PER_SECTION (MAX_NR_PAGES/MAX_SECTIONS) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 30 | |
| 31 | extern s8 physnode_map[]; |
| 32 | |
| 33 | static inline int pfn_to_nid(unsigned long pfn) |
| 34 | { |
| 35 | #ifdef CONFIG_NUMA |
Tejun Heo | d0ead15 | 2011-07-12 09:44:22 +0200 | [diff] [blame] | 36 | return((int) physnode_map[(pfn) / PAGES_PER_SECTION]); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 | #else |
| 38 | return 0; |
| 39 | #endif |
| 40 | } |
| 41 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | static inline int pfn_valid(int pfn) |
| 43 | { |
| 44 | int nid = pfn_to_nid(pfn); |
| 45 | |
| 46 | if (nid >= 0) |
| 47 | return (pfn < node_end_pfn(nid)); |
| 48 | return 0; |
| 49 | } |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 50 | |
Tejun Heo | a26474e | 2011-06-28 11:41:07 +0200 | [diff] [blame] | 51 | #define early_pfn_valid(pfn) pfn_valid((pfn)) |
| 52 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | #endif /* CONFIG_DISCONTIGMEM */ |
Andy Whitcroft | b159d43 | 2005-06-23 00:07:52 -0700 | [diff] [blame] | 54 | |
H. Peter Anvin | 1965aae | 2008-10-22 22:26:29 -0700 | [diff] [blame] | 55 | #endif /* _ASM_X86_MMZONE_32_H */ |