[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 02/11] [swiotlb] Make 'setup_io_tlb_npages' accept new 'swiotlb=' syntax.
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |