swiotlb: Correct kernel command line handler
Subsystems (2)
PATCH 1/1 swiotlb: Correct kernel command line handler
This patch corrects kernel command line handler when io_tlb_nslabs is set to 0.
A current implementation allocates default size memory (64MB) when 0 is given to io_tlb_nslabs ("swiotlb=0") by kernel command line. In other words, memory is allocated unintentionally.
--- lib/swiotlb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
lib/swiotlb.c +6 -2
@@ -55,6 +55,8 @@int swiotlb_force; +static int swiotlb_no_use; +/* * Used to do a quick range check in swiotlb_tbl_unmap_single and * swiotlb_tbl_sync_single_*, to see if the memory was in fact allocated by this
@@ -102,6 +104,8 @@ setup_io_tlb_npages(char *str) io_tlb_nslabs =simple_strtoul (str, &str,0 );/* avoid tail segment of size < IO_TLB_SEGSIZE */ io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); +if (!io_tlb_nslabs) + swiotlb_no_use =1 ; }if (*str ==',' ) ++str;
@@ -212,7 +216,7 @@ swiotlb_init(int verbose)unsigned char *vstart;unsigned long bytes; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); }
@@ -244,7 +248,7 @@ swiotlb_late_init_with_default_size(size_t default_size)unsigned int order;int rc =0 ; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); }
Signature · 1 line
1.7.10.4
Quoted 6 lines · Jungseok Lee
This patch corrects kernel command line handler when
io_tlb_nslabsis set to 0.A current implementation allocates default size memory (64MB) when 0 is given to
io_tlb_nslabs("swiotlb=0") by kernel command line. In other words, memory is allocated unintentionally.
What are the other IOMMUs that end up taking over the DMA ops? Or do you end up with no DMA ops?
Quoted 51 lines
Signed-off-by Jungseok Lee <[email protected]>Signed-off-by Sungjinn Chung <[email protected]>--- lib/swiotlb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)lib/swiotlb.c +6
-2@@ -55,6 +55,8 @@int swiotlb_force; +static int swiotlb_no_use; +/* * Used to do a quick range check in swiotlb_tbl_unmap_single and * swiotlb_tbl_sync_single_*, to see if the memory was in fact allocated by this @@ -102,6 +104,8 @@ setup_io_tlb_npages(char *str) io_tlb_nslabs =simple_strtoul (str, &str,0 );/* avoid tail segment of size < IO_TLB_SEGSIZE */ io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); +if (!io_tlb_nslabs) + swiotlb_no_use =1 ; }if (*str ==',' ) ++str;@@ -212,7 +216,7 @@ swiotlb_init(int verbose)unsigned char *vstart;unsigned long bytes; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); }@@ -244,7 +248,7 @@ swiotlb_late_init_with_default_size(size_t default_size)unsigned int order;int rc =0 ; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); }Signature · 1 line
1.7.10.4
Quoted 9 lines · Konrad Rzeszutek Wilk
Quoted 6 lines · Jungseok Lee
This patch corrects kernel command line handler when
io_tlb_nslabsis set to 0.A current implementation allocates default size memory (64MB) when 0 is given to
io_tlb_nslabs("swiotlb=0") by kernel command line. In other words, memory is allocated unintentionally.What are the other IOMMUs that end up taking over the DMA ops?
I think that no other IOMMUs take over it on ARM64 system, except Xen.
Quoted 1 line
Or do you end up with no DMA ops?
I focus on ARM64 system which uses swiotlb as default DMA ops.
If some ARM64 platforms would like to use memory only from __get_free_pages in swiotlb_alloc_coherent function, an interface would be needed to configure reserved memory size.
Thus, I add it to kernel command line handler.
Best Regards
Jungseok Lee
Quoted 54 lines
Quoted 48 lines
Signed-off-by Jungseok Lee <[email protected]>Signed-off-by Sungjinn Chung <[email protected]>--- lib/swiotlb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)lib/swiotlb.c index b604b83..9fe9f71 renamed from lib/swiotlb.c +0
-0100644
lib/swiotlb.c +2
-0@@ -55,6 +55,8 @@int swiotlb_force; +static int swiotlb_no_use; +/* * Used to do a quick range check in swiotlb_tbl_unmap_single and * swiotlb_tbl_sync_single_*, to see if the memory was in fact allocated by this @@ -102,6 +104,8 @@
setup_io_tlb_npages(char *str)lib/swiotlb.c +4
-3io_tlb_nslabs =simple_strtoul (str, &str,0 );/* avoid tail segment of size < IO_TLB_SEGSIZE */ io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); +if (!io_tlb_nslabs) + swiotlb_no_use =1 ; }if (*str ==',' ) ++str;@@ -212,7 +216,7 @@ swiotlb_init(int verbose)unsigned char *vstart;unsigned long bytes; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); }@@ -244,7 +248,7 @@ swiotlb_late_init_with_default_size(size_t default_size)unsigned int order;int rc =0 ; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); } --Quoted 3 lines
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 15 lines · Jungseok Lee
Quoted 9 lines · Konrad Rzeszutek Wilk
Quoted 6 lines · Jungseok Lee
This patch corrects kernel command line handler when
io_tlb_nslabsis set to 0.A current implementation allocates default size memory (64MB) when 0 is given to
io_tlb_nslabs("swiotlb=0") by kernel command line. In other words, memory is allocated unintentionally.What are the other IOMMUs that end up taking over the DMA ops?
I think that no other IOMMUs take over it on ARM64 system, except Xen.
Quoted 1 line
Or do you end up with no DMA ops?
Quoted 7 lines
I focus on ARM64 system which uses swiotlb as default DMA ops.
If some ARM64 platforms would like to use memory only from
__get_free_pagesinswiotlb_alloc_coherentfunction, an interface would be needed to configure reserved memory size.Thus, I add it to kernel command line handler.
OK. I somehow have lost track of this patch. Is this patch still valid?
Quoted 59 lines
Best Regards
Jungseok LeeQuoted 54 lines
Quoted 48 lines
Signed-off-by Jungseok Lee <[email protected]>Signed-off-by Sungjinn Chung <[email protected]>--- lib/swiotlb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)lib/swiotlb.c index b604b83..9fe9f71 renamed from lib/swiotlb.c +0
-0100644
lib/swiotlb.c +2
-0@@ -55,6 +55,8 @@int swiotlb_force; +static int swiotlb_no_use; +/* * Used to do a quick range check in swiotlb_tbl_unmap_single and * swiotlb_tbl_sync_single_*, to see if the memory was in fact allocated by this @@ -102,6 +104,8 @@
setup_io_tlb_npages(char *str)lib/swiotlb.c +4
-3io_tlb_nslabs =simple_strtoul (str, &str,0 );/* avoid tail segment of size < IO_TLB_SEGSIZE */ io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); +if (!io_tlb_nslabs) + swiotlb_no_use =1 ; }if (*str ==',' ) ++str;@@ -212,7 +216,7 @@ swiotlb_init(int verbose)unsigned char *vstart;unsigned long bytes; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); }@@ -244,7 +248,7 @@ swiotlb_late_init_with_default_size(size_t default_size)unsigned int order;int rc =0 ; -if (!io_tlb_nslabs) { +if (!swiotlb_no_use && !io_tlb_nslabs) { io_tlb_nslabs = (default_size >>IO_TLB_SHIFT ); io_tlb_nslabs =ALIGN (io_tlb_nslabs,IO_TLB_SEGSIZE ); } --Quoted 3 lines
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html