Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at dc39455e7948ec9bc5f3f2dced5c2f5ac8a8dfd9 142 lines 3.6 kB view raw
1/* 2 * Written by Pat Gaughen (gone@us.ibm.com) Mar 2002 3 * 4 */ 5 6#ifndef _ASM_MMZONE_H_ 7#define _ASM_MMZONE_H_ 8 9#include <asm/smp.h> 10 11#ifdef CONFIG_NUMA 12extern struct pglist_data *node_data[]; 13#define NODE_DATA(nid) (node_data[nid]) 14 15#ifdef CONFIG_X86_NUMAQ 16 #include <asm/numaq.h> 17#elif defined(CONFIG_ACPI_SRAT)/* summit or generic arch */ 18 #include <asm/srat.h> 19#endif 20 21extern int get_memcfg_numa_flat(void ); 22/* 23 * This allows any one NUMA architecture to be compiled 24 * for, and still fall back to the flat function if it 25 * fails. 26 */ 27static inline void get_memcfg_numa(void) 28{ 29#ifdef CONFIG_X86_NUMAQ 30 if (get_memcfg_numaq()) 31 return; 32#elif defined(CONFIG_ACPI_SRAT) 33 if (get_memcfg_from_srat()) 34 return; 35#endif 36 37 get_memcfg_numa_flat(); 38} 39 40extern int early_pfn_to_nid(unsigned long pfn); 41extern void numa_kva_reserve(void); 42 43#else /* !CONFIG_NUMA */ 44 45#define get_memcfg_numa get_memcfg_numa_flat 46#define get_zholes_size(n) (0) 47 48static inline void numa_kva_reserve(void) 49{ 50} 51#endif /* CONFIG_NUMA */ 52 53#ifdef CONFIG_DISCONTIGMEM 54 55/* 56 * generic node memory support, the following assumptions apply: 57 * 58 * 1) memory comes in 256Mb contigious chunks which are either present or not 59 * 2) we will not have more than 64Gb in total 60 * 61 * for now assume that 64Gb is max amount of RAM for whole system 62 * 64Gb / 4096bytes/page = 16777216 pages 63 */ 64#define MAX_NR_PAGES 16777216 65#define MAX_ELEMENTS 256 66#define PAGES_PER_ELEMENT (MAX_NR_PAGES/MAX_ELEMENTS) 67 68extern s8 physnode_map[]; 69 70static inline int pfn_to_nid(unsigned long pfn) 71{ 72#ifdef CONFIG_NUMA 73 return((int) physnode_map[(pfn) / PAGES_PER_ELEMENT]); 74#else 75 return 0; 76#endif 77} 78 79/* 80 * Following are macros that each numa implmentation must define. 81 */ 82 83#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) 84#define node_end_pfn(nid) \ 85({ \ 86 pg_data_t *__pgdat = NODE_DATA(nid); \ 87 __pgdat->node_start_pfn + __pgdat->node_spanned_pages; \ 88}) 89 90#ifdef CONFIG_X86_NUMAQ /* we have contiguous memory on NUMA-Q */ 91#define pfn_valid(pfn) ((pfn) < num_physpages) 92#else 93static inline int pfn_valid(int pfn) 94{ 95 int nid = pfn_to_nid(pfn); 96 97 if (nid >= 0) 98 return (pfn < node_end_pfn(nid)); 99 return 0; 100} 101#endif /* CONFIG_X86_NUMAQ */ 102 103#endif /* CONFIG_DISCONTIGMEM */ 104 105#ifdef CONFIG_NEED_MULTIPLE_NODES 106 107/* 108 * Following are macros that are specific to this numa platform. 109 */ 110#define reserve_bootmem(addr, size, flags) \ 111 reserve_bootmem_node(NODE_DATA(0), (addr), (size), (flags)) 112#define alloc_bootmem(x) \ 113 __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) 114#define alloc_bootmem_low(x) \ 115 __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, 0) 116#define alloc_bootmem_pages(x) \ 117 __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) 118#define alloc_bootmem_low_pages(x) \ 119 __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0) 120#define alloc_bootmem_node(pgdat, x) \ 121({ \ 122 struct pglist_data __maybe_unused \ 123 *__alloc_bootmem_node__pgdat = (pgdat); \ 124 __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, \ 125 __pa(MAX_DMA_ADDRESS)); \ 126}) 127#define alloc_bootmem_pages_node(pgdat, x) \ 128({ \ 129 struct pglist_data __maybe_unused \ 130 *__alloc_bootmem_node__pgdat = (pgdat); \ 131 __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, \ 132 __pa(MAX_DMA_ADDRESS)) \ 133}) 134#define alloc_bootmem_low_pages_node(pgdat, x) \ 135({ \ 136 struct pglist_data __maybe_unused \ 137 *__alloc_bootmem_node__pgdat = (pgdat); \ 138 __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0); \ 139}) 140#endif /* CONFIG_NEED_MULTIPLE_NODES */ 141 142#endif /* _ASM_MMZONE_H_ */