Re: [PATCH v4 05/11] swiotlb: add swiotlb_set_default_size()
On Tue, 16 Mar 2010 06:58:41 +0100 Albert Herranz albert_herr...@yahoo.es wrote: FUJITA Tomonori wrote: On Fri, 12 Mar 2010 20:12:40 +0100 Albert Herranz albert_herr...@yahoo.es wrote: The current SWIOTLB code uses a default of 64MB for the IO TLB area. This size can be influenced using a kernel command line parameter swiotlb. Unfortunately, the parsing of the kernel command line is done _after_ the swiotlb is initialized on some architectures. This patch adds a new function swiotlb_set_default_size() which can be used before swiotlb_init() to indicate the desired IO TLB area size in bytes. This will be used later to implement a smaller IO TLB on the Nintendo Wii video game console which just comes with 24MB + 64MB of RAM. CC: linuxppc-dev@lists.ozlabs.org CC: linux-ker...@vger.kernel.org CC: x...@kernel.org CC: linux-i...@vger.kernel.org Signed-off-by: Albert Herranz albert_herr...@yahoo.es --- include/linux/swiotlb.h |2 ++ lib/swiotlb.c | 20 2 files changed, 22 insertions(+), 0 deletions(-) Please fix the powerpc swiotlb initialization instead. Calling swiotlb_init() before parsing kernel parameters sounds wrong. Any reasons why you can't fix it? I think that this would be better asked by a PowerPC maintainer. Ben? If this is really a problem the swiotlb late init may be a solution too in this particular case. Hmm, why swiotlb_late_init_with_default_size()? Why can't you initialize swiotlb in mem_init() like this (only compile tested)? Any time before freeing bootmem works for swiotlb. 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); ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v4 05/11] swiotlb: add swiotlb_set_default_size()
On Mar 16, 2010, at 5:08 AM, FUJITA Tomonori wrote: On Tue, 16 Mar 2010 06:58:41 +0100 Albert Herranz albert_herr...@yahoo.es wrote: FUJITA Tomonori wrote: On Fri, 12 Mar 2010 20:12:40 +0100 Albert Herranz albert_herr...@yahoo.es wrote: The current SWIOTLB code uses a default of 64MB for the IO TLB area. This size can be influenced using a kernel command line parameter swiotlb. Unfortunately, the parsing of the kernel command line is done _after_ the swiotlb is initialized on some architectures. This patch adds a new function swiotlb_set_default_size() which can be used before swiotlb_init() to indicate the desired IO TLB area size in bytes. This will be used later to implement a smaller IO TLB on the Nintendo Wii video game console which just comes with 24MB + 64MB of RAM. CC: linuxppc-dev@lists.ozlabs.org CC: linux-ker...@vger.kernel.org CC: x...@kernel.org CC: linux-i...@vger.kernel.org Signed-off-by: Albert Herranz albert_herr...@yahoo.es --- include/linux/swiotlb.h |2 ++ lib/swiotlb.c | 20 2 files changed, 22 insertions(+), 0 deletions(-) Please fix the powerpc swiotlb initialization instead. Calling swiotlb_init() before parsing kernel parameters sounds wrong. Any reasons why you can't fix it? I think that this would be better asked by a PowerPC maintainer. Ben? If this is really a problem the swiotlb late init may be a solution too in this particular case. Hmm, why swiotlb_late_init_with_default_size()? Why can't you initialize swiotlb in mem_init() like this (only compile tested)? Any time before freeing bootmem works for swiotlb. This is an oops in the original patchset - I think it should be fine to move the swiotlb_init later as Fujita suggests, at least for 32-bit powerpc. I just booted this on mpc8641 and everything seems OK. -Becky 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); -- To unsubscribe from this list: send the line unsubscribe linux- kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v4 05/11] swiotlb: add swiotlb_set_default_size()
On Tue, 16 Mar 2010 14:28:09 -0500 Becky Bruce bec...@kernel.crashing.org wrote: On Mar 16, 2010, at 5:08 AM, FUJITA Tomonori wrote: On Tue, 16 Mar 2010 06:58:41 +0100 Albert Herranz albert_herr...@yahoo.es wrote: FUJITA Tomonori wrote: On Fri, 12 Mar 2010 20:12:40 +0100 Albert Herranz albert_herr...@yahoo.es wrote: The current SWIOTLB code uses a default of 64MB for the IO TLB area. This size can be influenced using a kernel command line parameter swiotlb. Unfortunately, the parsing of the kernel command line is done _after_ the swiotlb is initialized on some architectures. This patch adds a new function swiotlb_set_default_size() which can be used before swiotlb_init() to indicate the desired IO TLB area size in bytes. This will be used later to implement a smaller IO TLB on the Nintendo Wii video game console which just comes with 24MB + 64MB of RAM. CC: linuxppc-dev@lists.ozlabs.org CC: linux-ker...@vger.kernel.org CC: x...@kernel.org CC: linux-i...@vger.kernel.org Signed-off-by: Albert Herranz albert_herr...@yahoo.es --- include/linux/swiotlb.h |2 ++ lib/swiotlb.c | 20 2 files changed, 22 insertions(+), 0 deletions(-) Please fix the powerpc swiotlb initialization instead. Calling swiotlb_init() before parsing kernel parameters sounds wrong. Any reasons why you can't fix it? I think that this would be better asked by a PowerPC maintainer. Ben? If this is really a problem the swiotlb late init may be a solution too in this particular case. Hmm, why swiotlb_late_init_with_default_size()? Why can't you initialize swiotlb in mem_init() like this (only compile tested)? Any time before freeing bootmem works for swiotlb. This is an oops in the original patchset - I think it should be fine to move the swiotlb_init later as Fujita suggests, at least for 32-bit powerpc. I just booted this on mpc8641 and everything seems OK. Thanks! I'll resend this patch in the proper format. This patch fixes the problem that powerpc ignores swiotlb boot options so we can merge it independent of Albert's patchset. ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v4 05/11] swiotlb: add swiotlb_set_default_size()
On Fri, 12 Mar 2010 20:12:40 +0100 Albert Herranz albert_herr...@yahoo.es wrote: The current SWIOTLB code uses a default of 64MB for the IO TLB area. This size can be influenced using a kernel command line parameter swiotlb. Unfortunately, the parsing of the kernel command line is done _after_ the swiotlb is initialized on some architectures. This patch adds a new function swiotlb_set_default_size() which can be used before swiotlb_init() to indicate the desired IO TLB area size in bytes. This will be used later to implement a smaller IO TLB on the Nintendo Wii video game console which just comes with 24MB + 64MB of RAM. CC: linuxppc-dev@lists.ozlabs.org CC: linux-ker...@vger.kernel.org CC: x...@kernel.org CC: linux-i...@vger.kernel.org Signed-off-by: Albert Herranz albert_herr...@yahoo.es --- include/linux/swiotlb.h |2 ++ lib/swiotlb.c | 20 2 files changed, 22 insertions(+), 0 deletions(-) Please fix the powerpc swiotlb initialization instead. Calling swiotlb_init() before parsing kernel parameters sounds wrong. Any reasons why you can't fix it? ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v4 05/11] swiotlb: add swiotlb_set_default_size()
FUJITA Tomonori wrote: On Fri, 12 Mar 2010 20:12:40 +0100 Albert Herranz albert_herr...@yahoo.es wrote: The current SWIOTLB code uses a default of 64MB for the IO TLB area. This size can be influenced using a kernel command line parameter swiotlb. Unfortunately, the parsing of the kernel command line is done _after_ the swiotlb is initialized on some architectures. This patch adds a new function swiotlb_set_default_size() which can be used before swiotlb_init() to indicate the desired IO TLB area size in bytes. This will be used later to implement a smaller IO TLB on the Nintendo Wii video game console which just comes with 24MB + 64MB of RAM. CC: linuxppc-dev@lists.ozlabs.org CC: linux-ker...@vger.kernel.org CC: x...@kernel.org CC: linux-i...@vger.kernel.org Signed-off-by: Albert Herranz albert_herr...@yahoo.es --- include/linux/swiotlb.h |2 ++ lib/swiotlb.c | 20 2 files changed, 22 insertions(+), 0 deletions(-) Please fix the powerpc swiotlb initialization instead. Calling swiotlb_init() before parsing kernel parameters sounds wrong. Any reasons why you can't fix it? I think that this would be better asked by a PowerPC maintainer. Ben? If this is really a problem the swiotlb late init may be a solution too in this particular case. Thanks, Albert ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[PATCH v4 05/11] swiotlb: add swiotlb_set_default_size()
The current SWIOTLB code uses a default of 64MB for the IO TLB area. This size can be influenced using a kernel command line parameter swiotlb. Unfortunately, the parsing of the kernel command line is done _after_ the swiotlb is initialized on some architectures. This patch adds a new function swiotlb_set_default_size() which can be used before swiotlb_init() to indicate the desired IO TLB area size in bytes. This will be used later to implement a smaller IO TLB on the Nintendo Wii video game console which just comes with 24MB + 64MB of RAM. CC: linuxppc-dev@lists.ozlabs.org CC: linux-ker...@vger.kernel.org CC: x...@kernel.org CC: linux-i...@vger.kernel.org Signed-off-by: Albert Herranz albert_herr...@yahoo.es --- include/linux/swiotlb.h |2 ++ lib/swiotlb.c | 20 2 files changed, 22 insertions(+), 0 deletions(-) diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index 3954228..2af6a45 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h @@ -22,6 +22,8 @@ extern int swiotlb_force; */ #define IO_TLB_SHIFT 11 +extern size_t __init swiotlb_set_default_size(size_t size); + extern void swiotlb_init(int verbose); extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs); diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 8f2dad9..dbeca50 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c @@ -117,6 +117,26 @@ setup_io_tlb_npages(char *str) __setup(swiotlb=, setup_io_tlb_npages); /* make io_tlb_overflow tunable too? */ +/** + * swiotlb_set_default_size() - set the default size for the IO TLB + * @size: size in bytes of the IO TLB + * + * A platform can use this function to change the default size of the + * IO TLB when the default of 64MB is not suitable. + * This function must be called before swiotlb_init(). + * + * Note that on some platforms this is the only way to influence the + * size of the IO TLB, as the command line may be parsed _after_ the + * IO TLB is initialized. + */ +size_t __init swiotlb_set_default_size(size_t size) +{ + size_t previous_size = io_tlb_nslabs IO_TLB_SHIFT; + + io_tlb_nslabs = size IO_TLB_SHIFT; + return previous_size; +} + void * __weak __init swiotlb_alloc_boot(size_t size, unsigned long nslabs) { return alloc_bootmem_low_pages(size); -- 1.6.3.3 ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev