浏览代码

sh: establish PMB mappings for NUMA nodes.

In the case of NUMA emulation when in range PPNs are being used for
secondary nodes, we need to make sure that the PMB has a mapping for it
before setting up the pgdat. This prevents the MMU from resetting.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt 15 年之前
父节点
当前提交
09e1172317
共有 2 个文件被更改,包括 4 次插入2 次删除
  1. 1 2
      arch/sh/kernel/setup.c
  2. 3 0
      arch/sh/mm/numa.c

+ 1 - 2
arch/sh/kernel/setup.c

@@ -443,7 +443,7 @@ void __init setup_arch(char **cmdline_p)
 
 
 	nodes_clear(node_online_map);
 	nodes_clear(node_online_map);
 
 
-	/* Setup bootmem with available RAM */
+	pmb_init();
 	lmb_init();
 	lmb_init();
 	setup_memory();
 	setup_memory();
 	sparse_init();
 	sparse_init();
@@ -452,7 +452,6 @@ void __init setup_arch(char **cmdline_p)
 	conswitchp = &dummy_con;
 	conswitchp = &dummy_con;
 #endif
 #endif
 	paging_init();
 	paging_init();
-	pmb_init();
 
 
 	ioremap_fixed_init();
 	ioremap_fixed_init();
 
 

+ 3 - 0
arch/sh/mm/numa.c

@@ -74,6 +74,9 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)
 	start_pfn = start >> PAGE_SHIFT;
 	start_pfn = start >> PAGE_SHIFT;
 	end_pfn = end >> PAGE_SHIFT;
 	end_pfn = end >> PAGE_SHIFT;
 
 
+	pmb_bolt_mapping((unsigned long)__va(start), start, end - start,
+			 PAGE_KERNEL);
+
 	lmb_add(start, end - start);
 	lmb_add(start, end - start);
 
 
 	__add_active_range(nid, start_pfn, end_pfn);
 	__add_active_range(nid, start_pfn, end_pfn);