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