aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/mm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/mm')
-rw-r--r--arch/sh/mm/Kconfig10
-rw-r--r--arch/sh/mm/init.c29
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
300config ARCH_FLATMEM_ENABLE 300config ARCH_FLATMEM_ENABLE
301 def_bool y 301 def_bool y
302 302
303config ARCH_SPARSEMEM_ENABLE
304 def_bool y
305 select SPARSEMEM_STATIC
306
307config ARCH_SPARSEMEM_DEFAULT
308 def_bool y
309
303config MAX_ACTIVE_REGIONS 310config MAX_ACTIVE_REGIONS
304 int 311 int
305 default "1" 312 default "1"
@@ -307,6 +314,9 @@ config MAX_ACTIVE_REGIONS
307config ARCH_POPULATES_NODE_MAP 314config ARCH_POPULATES_NODE_MAP
308 def_bool y 315 def_bool y
309 316
317config ARCH_SELECT_MEMORY_MODEL
318 def_bool y
319
310choice 320choice
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
186void __init mem_init(void) 177void __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