Patchwork powerpc: fix swiotlb to respect the boot option

login
register
mail settings
Submitter FUJITA Tomonori
Date March 16, 2010, 11:16 p.m.
Message ID <20100317081540C.fujita.tomonori@lab.ntt.co.jp>
Download mbox | patch
Permalink /patch/47907/
State Accepted
Headers show

Comments

FUJITA Tomonori - March 16, 2010, 11:16 p.m.
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>
---
 arch/powerpc/kernel/setup_32.c |    6 ------
 arch/powerpc/kernel/setup_64.c |    6 ------
 arch/powerpc/mm/mem.c          |    6 ++++++
 3 files changed, 6 insertions(+), 12 deletions(-)
Albert Herranz - March 17, 2010, 6:03 a.m.
FUJITA Tomonori wrote:
> 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>

Thanks!

Tested-by: Albert Herranz <albert_herranz@yahoo.es>

> ---
>  arch/powerpc/kernel/setup_32.c |    6 ------
>  arch/powerpc/kernel/setup_64.c |    6 ------
>  arch/powerpc/mm/mem.c          |    6 ++++++
>  3 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
> index b152de3..8f58986 100644
> --- a/arch/powerpc/kernel/setup_32.c
> +++ b/arch/powerpc/kernel/setup_32.c
> @@ -39,7 +39,6 @@
>  #include <asm/serial.h>
>  #include <asm/udbg.h>
>  #include <asm/mmu_context.h>
> -#include <asm/swiotlb.h>
>  
>  #include "setup.h"
>  
> @@ -343,11 +342,6 @@ void __init setup_arch(char **cmdline_p)
>  		ppc_md.setup_arch();
>  	if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab);
>  
> -#ifdef CONFIG_SWIOTLB
> -	if (ppc_swiotlb_enable)
> -		swiotlb_init(1);
> -#endif
> -
>  	paging_init();
>  
>  	/* Initialize the MMU context management stuff */
> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
> index 6354739..9143891 100644
> --- a/arch/powerpc/kernel/setup_64.c
> +++ b/arch/powerpc/kernel/setup_64.c
> @@ -61,7 +61,6 @@
>  #include <asm/xmon.h>
>  #include <asm/udbg.h>
>  #include <asm/kexec.h>
> -#include <asm/swiotlb.h>
>  #include <asm/mmu_context.h>
>  
>  #include "setup.h"
> @@ -541,11 +540,6 @@ void __init setup_arch(char **cmdline_p)
>  	if (ppc_md.setup_arch)
>  		ppc_md.setup_arch();
>  
> -#ifdef CONFIG_SWIOTLB
> -	if (ppc_swiotlb_enable)
> -		swiotlb_init(1);
> -#endif
> -
>  	paging_init();
>  
>  	/* Initialize the MMU context management stuff */
> diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
> index 311224c..448f972 100644
> --- a/arch/powerpc/mm/mem.c
> +++ b/arch/powerpc/mm/mem.c
> @@ -48,6 +48,7 @@
>  #include <asm/sparsemem.h>
>  #include <asm/vdso.h>
>  #include <asm/fixmap.h>
> +#include <asm/swiotlb.h>
>  
>  #include "mmu_decl.h"
>  
> @@ -320,6 +321,11 @@ void __init mem_init(void)
>  	struct page *page;
>  	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;
>  	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
>

Patch

diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index b152de3..8f58986 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -39,7 +39,6 @@ 
 #include <asm/serial.h>
 #include <asm/udbg.h>
 #include <asm/mmu_context.h>
-#include <asm/swiotlb.h>
 
 #include "setup.h"
 
@@ -343,11 +342,6 @@  void __init setup_arch(char **cmdline_p)
 		ppc_md.setup_arch();
 	if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab);
 
-#ifdef CONFIG_SWIOTLB
-	if (ppc_swiotlb_enable)
-		swiotlb_init(1);
-#endif
-
 	paging_init();
 
 	/* Initialize the MMU context management stuff */
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 6354739..9143891 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -61,7 +61,6 @@ 
 #include <asm/xmon.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
-#include <asm/swiotlb.h>
 #include <asm/mmu_context.h>
 
 #include "setup.h"
@@ -541,11 +540,6 @@  void __init setup_arch(char **cmdline_p)
 	if (ppc_md.setup_arch)
 		ppc_md.setup_arch();
 
-#ifdef CONFIG_SWIOTLB
-	if (ppc_swiotlb_enable)
-		swiotlb_init(1);
-#endif
-
 	paging_init();
 
 	/* Initialize the MMU context management stuff */
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 311224c..448f972 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -48,6 +48,7 @@ 
 #include <asm/sparsemem.h>
 #include <asm/vdso.h>
 #include <asm/fixmap.h>
+#include <asm/swiotlb.h>
 
 #include "mmu_decl.h"
 
@@ -320,6 +321,11 @@  void __init mem_init(void)
 	struct page *page;
 	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;
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);