WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 02/11] [swiotlb] Make 'setup_io_tlb_npages' accept ne

The old syntax for 'swiotlb' is still in effect, and we extend it
now to include the overflow buffer size. The syntax is now:

swiotlb=[force,][nslabs=<pages>,][overflow=<size>] or more
commonly know as:

swiotlb=[force]
swiotlb=[nslabs=<pages>]
swiotlb=[overflow=<size>]

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
 Documentation/x86/x86_64/boot-options.txt |    6 ++++-
 lib/swiotlb.c                             |   36 +++++++++++++++++++++++++---
 2 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/Documentation/x86/x86_64/boot-options.txt 
b/Documentation/x86/x86_64/boot-options.txt
index 29a6ff8..81f9b94 100644
--- a/Documentation/x86/x86_64/boot-options.txt
+++ b/Documentation/x86/x86_64/boot-options.txt
@@ -267,10 +267,14 @@ IOMMU (input/output memory management unit)
 
   iommu options only relevant to the software bounce buffering (SWIOTLB) IOMMU
   implementation:
-    swiotlb=<pages>[,force]
+    swiotlb=[npages=<pages>]
+    swiotlb=[force]
+    swiotlb=[overflow=<size>]
+
     <pages>            Prereserve that many 128K pages for the software IO
                        bounce buffering.
     force              Force all IO through the software TLB.
+    <size>             Size in bytes of the overflow buffer.
 
   Settings for the IBM Calgary hardware IOMMU currently found in IBM
   pSeries and xSeries machines:
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index e6d9e32..0663879 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -102,7 +102,27 @@ static int late_alloc;
 static int __init
 setup_io_tlb_npages(char *str)
 {
+       int get_value(const char *token, char *str, char **endp)
+       {
+               ssize_t len;
+               int val = 0;
+
+               len = strlen(token);
+               if (!strncmp(str, token, len)) {
+                       str += len;
+                       if (*str == '=')
+                               ++str;
+                       if (*str != '\0')
+                               val = simple_strtoul(str, endp, 0);
+               }
+               *endp = str;
+               return val;
+       }
+
+       int val;
+
        while (*str) {
+               /* The old syntax */
                if (isdigit(*str)) {
                        io_tlb_nslabs = simple_strtoul(str, &str, 0);
                        /* avoid tail segment of size < IO_TLB_SEGSIZE */
@@ -110,14 +130,22 @@ setup_io_tlb_npages(char *str)
                }
                if (!strncmp(str, "force", 5))
                        swiotlb_force = 1;
-               str += strcspn(str, ",");
-               if (*str == ',')
-                       ++str;
+               /* The new syntax: swiotlb=nslabs=16384,overflow=32768,force */
+               val = get_value("nslabs", str, &str);
+               if (val)
+                       io_tlb_nslabs = ALIGN(val, IO_TLB_SEGSIZE);
+
+               val = get_value("overflow", str, &str);
+               if (val)
+                       io_tlb_overflow = val;
+               str = strpbrk(str, ",");
+               if (!str)
+                       break;
+               str++; /* skip ',' */
        }
        return 1;
 }
 __setup("swiotlb=", setup_io_tlb_npages);
-/* make io_tlb_overflow tunable too? */
 
 /* Note that this doesn't work with highmem page */
 static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev,
-- 
1.6.2.5


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>