소스 검색

powerpc: Fix swiotlb to respect the boot option

powerpc initializes swiotlb before parsing the kernel boot options so
swiotlb options (e.g. specifying the swiotlb buffer size) are ignored.

Any time before freeing bootmem works for swiotlb so this patch moves
powerpc's swiotlb initialization after parsing the kernel boot
options, mem_init (as x86 does).

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tested-by: Becky Bruce <beckyb@kernel.crashing.org>
Tested-by: Albert Herranz <albert_herranz@yahoo.es>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
FUJITA Tomonori 15 년 전
부모
커밋
a93272969c
3개의 변경된 파일6개의 추가작업 그리고 12개의 파일을 삭제
  1. 0 6
      arch/powerpc/kernel/setup_32.c
  2. 0 6
      arch/powerpc/kernel/setup_64.c
  3. 6 0
      arch/powerpc/mm/mem.c

+ 0 - 6
arch/powerpc/kernel/setup_32.c

@@ -39,7 +39,6 @@
 #include <asm/serial.h>
 #include <asm/serial.h>
 #include <asm/udbg.h>
 #include <asm/udbg.h>
 #include <asm/mmu_context.h>
 #include <asm/mmu_context.h>
-#include <asm/swiotlb.h>
 
 
 #include "setup.h"
 #include "setup.h"
 
 
@@ -343,11 +342,6 @@ void __init setup_arch(char **cmdline_p)
 		ppc_md.setup_arch();
 		ppc_md.setup_arch();
 	if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab);
 	if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab);
 
 
-#ifdef CONFIG_SWIOTLB
-	if (ppc_swiotlb_enable)
-		swiotlb_init(1);
-#endif
-
 	paging_init();
 	paging_init();
 
 
 	/* Initialize the MMU context management stuff */
 	/* Initialize the MMU context management stuff */

+ 0 - 6
arch/powerpc/kernel/setup_64.c

@@ -61,7 +61,6 @@
 #include <asm/xmon.h>
 #include <asm/xmon.h>
 #include <asm/udbg.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
 #include <asm/kexec.h>
-#include <asm/swiotlb.h>
 #include <asm/mmu_context.h>
 #include <asm/mmu_context.h>
 
 
 #include "setup.h"
 #include "setup.h"
@@ -541,11 +540,6 @@ void __init setup_arch(char **cmdline_p)
 	if (ppc_md.setup_arch)
 	if (ppc_md.setup_arch)
 		ppc_md.setup_arch();
 		ppc_md.setup_arch();
 
 
-#ifdef CONFIG_SWIOTLB
-	if (ppc_swiotlb_enable)
-		swiotlb_init(1);
-#endif
-
 	paging_init();
 	paging_init();
 
 
 	/* Initialize the MMU context management stuff */
 	/* Initialize the MMU context management stuff */

+ 6 - 0
arch/powerpc/mm/mem.c

@@ -48,6 +48,7 @@
 #include <asm/sparsemem.h>
 #include <asm/sparsemem.h>
 #include <asm/vdso.h>
 #include <asm/vdso.h>
 #include <asm/fixmap.h>
 #include <asm/fixmap.h>
+#include <asm/swiotlb.h>
 
 
 #include "mmu_decl.h"
 #include "mmu_decl.h"
 
 
@@ -320,6 +321,11 @@ void __init mem_init(void)
 	struct page *page;
 	struct page *page;
 	unsigned long reservedpages = 0, codesize, initsize, datasize, bsssize;
 	unsigned long reservedpages = 0, codesize, initsize, datasize, bsssize;
 
 
+#ifdef CONFIG_SWIOTLB
+	if (ppc_swiotlb_enable)
+		swiotlb_init(1);
+#endif
+
 	num_physpages = lmb.memory.size >> PAGE_SHIFT;
 	num_physpages = lmb.memory.size >> PAGE_SHIFT;
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);