diff options
Diffstat (limited to 'arch/sh/mm')
-rw-r--r-- | arch/sh/mm/Kconfig | 10 | ||||
-rw-r--r-- | arch/sh/mm/init.c | 29 |
2 files changed, 16 insertions, 23 deletions
diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index 00f64c41edba..46fd212b3ed6 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig | |||
@@ -300,6 +300,13 @@ config NODES_SHIFT | |||
300 | config ARCH_FLATMEM_ENABLE | 300 | config ARCH_FLATMEM_ENABLE |
301 | def_bool y | 301 | def_bool y |
302 | 302 | ||
303 | config ARCH_SPARSEMEM_ENABLE | ||
304 | def_bool y | ||
305 | select SPARSEMEM_STATIC | ||
306 | |||
307 | config ARCH_SPARSEMEM_DEFAULT | ||
308 | def_bool y | ||
309 | |||
303 | config MAX_ACTIVE_REGIONS | 310 | config MAX_ACTIVE_REGIONS |
304 | int | 311 | int |
305 | default "1" | 312 | default "1" |
@@ -307,6 +314,9 @@ config MAX_ACTIVE_REGIONS | |||
307 | config ARCH_POPULATES_NODE_MAP | 314 | config ARCH_POPULATES_NODE_MAP |
308 | def_bool y | 315 | def_bool y |
309 | 316 | ||
317 | config ARCH_SELECT_MEMORY_MODEL | ||
318 | def_bool y | ||
319 | |||
310 | choice | 320 | choice |
311 | prompt "Kernel page size" | 321 | prompt "Kernel page size" |
312 | default PAGE_SIZE_4KB | 322 | default PAGE_SIZE_4KB |
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index e0e644ff3204..1589466f9f87 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c | |||
@@ -36,14 +36,11 @@ void show_mem(void) | |||
36 | show_free_areas(); | 36 | show_free_areas(); |
37 | 37 | ||
38 | for_each_online_pgdat(pgdat) { | 38 | for_each_online_pgdat(pgdat) { |
39 | struct page *page, *end; | 39 | unsigned long flags, i; |
40 | unsigned long flags; | ||
41 | 40 | ||
42 | pgdat_resize_lock(pgdat, &flags); | 41 | pgdat_resize_lock(pgdat, &flags); |
43 | page = pgdat->node_mem_map; | 42 | for (i = 0; i < pgdat->node_spanned_pages; i++) { |
44 | end = page + pgdat->node_spanned_pages; | 43 | struct page *page = pgdat_page_nr(pgdat, i); |
45 | |||
46 | do { | ||
47 | total++; | 44 | total++; |
48 | if (PageReserved(page)) | 45 | if (PageReserved(page)) |
49 | reserved++; | 46 | reserved++; |
@@ -55,9 +52,7 @@ void show_mem(void) | |||
55 | free++; | 52 | free++; |
56 | else | 53 | else |
57 | shared += page_count(page) - 1; | 54 | shared += page_count(page) - 1; |
58 | page++; | 55 | } |
59 | } while (page < end); | ||
60 | |||
61 | pgdat_resize_unlock(pgdat, &flags); | 56 | pgdat_resize_unlock(pgdat, &flags); |
62 | } | 57 | } |
63 | 58 | ||
@@ -169,15 +164,11 @@ void __init paging_init(void) | |||
169 | low = pgdat->bdata->node_low_pfn; | 164 | low = pgdat->bdata->node_low_pfn; |
170 | 165 | ||
171 | max_zone_pfns[ZONE_NORMAL] = low; | 166 | max_zone_pfns[ZONE_NORMAL] = low; |
172 | add_active_range(nid, start_pfn, low); | ||
173 | 167 | ||
174 | printk("Node %u: start_pfn = 0x%lx, low = 0x%lx\n", | 168 | printk("Node %u: start_pfn = 0x%lx, low = 0x%lx\n", |
175 | nid, start_pfn, low); | 169 | nid, start_pfn, low); |
176 | 170 | ||
177 | free_area_init_nodes(max_zone_pfns); | 171 | free_area_init_nodes(max_zone_pfns); |
178 | |||
179 | printk("Node %u: mem_map starts at %p\n", | ||
180 | pgdat->node_id, pgdat->node_mem_map); | ||
181 | } | 172 | } |
182 | } | 173 | } |
183 | 174 | ||
@@ -185,16 +176,13 @@ static struct kcore_list kcore_mem, kcore_vmalloc; | |||
185 | 176 | ||
186 | void __init mem_init(void) | 177 | void __init mem_init(void) |
187 | { | 178 | { |
188 | int codesize, reservedpages, datasize, initsize; | 179 | int codesize, datasize, initsize; |
189 | int nid; | 180 | int nid; |
190 | 181 | ||
191 | reservedpages = 0; | ||
192 | |||
193 | for_each_online_node(nid) { | 182 | for_each_online_node(nid) { |
194 | pg_data_t *pgdat = NODE_DATA(nid); | 183 | pg_data_t *pgdat = NODE_DATA(nid); |
195 | unsigned long node_pages = 0; | 184 | unsigned long node_pages = 0; |
196 | void *node_high_memory; | 185 | void *node_high_memory; |
197 | int i; | ||
198 | 186 | ||
199 | num_physpages += pgdat->node_present_pages; | 187 | num_physpages += pgdat->node_present_pages; |
200 | 188 | ||
@@ -203,10 +191,6 @@ void __init mem_init(void) | |||
203 | 191 | ||
204 | totalram_pages += node_pages; | 192 | totalram_pages += node_pages; |
205 | 193 | ||
206 | for (i = 0; i < node_pages; i++) | ||
207 | if (PageReserved(pgdat->node_mem_map + i)) | ||
208 | reservedpages++; | ||
209 | |||
210 | node_high_memory = (void *)((pgdat->node_start_pfn + | 194 | node_high_memory = (void *)((pgdat->node_start_pfn + |
211 | pgdat->node_spanned_pages) << | 195 | pgdat->node_spanned_pages) << |
212 | PAGE_SHIFT); | 196 | PAGE_SHIFT); |
@@ -239,11 +223,10 @@ void __init mem_init(void) | |||
239 | VMALLOC_END - VMALLOC_START); | 223 | VMALLOC_END - VMALLOC_START); |
240 | 224 | ||
241 | printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, " | 225 | printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, " |
242 | "%dk reserved, %dk data, %dk init)\n", | 226 | "%dk data, %dk init)\n", |
243 | (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), | 227 | (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), |
244 | totalram_pages << (PAGE_SHIFT-10), | 228 | totalram_pages << (PAGE_SHIFT-10), |
245 | codesize >> 10, | 229 | codesize >> 10, |
246 | reservedpages << (PAGE_SHIFT-10), | ||
247 | datasize >> 10, | 230 | datasize >> 10, |
248 | initsize >> 10); | 231 | initsize >> 10); |
249 | 232 | ||