lkml.org 
[lkml]   [2021]   [Mar]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] swiotlb: Add swiotlb=off to disable SWIOTLB
    Date
    It may be useful to disable the SWIOTLB completely for testing or when a
    platform is known not to have any DRAM addressing limitations what so
    ever.

    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    ---
    Documentation/admin-guide/kernel-parameters.txt | 1 +
    include/linux/swiotlb.h | 1 +
    kernel/dma/swiotlb.c | 9 +++++++++
    3 files changed, 11 insertions(+)

    diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
    index 04545725f187..b0223e48921e 100644
    --- a/Documentation/admin-guide/kernel-parameters.txt
    +++ b/Documentation/admin-guide/kernel-parameters.txt
    @@ -5278,6 +5278,7 @@
    force -- force using of bounce buffers even if they
    wouldn't be automatically used by the kernel
    noforce -- Never use bounce buffers (for debugging)
    + off -- Completely disable SWIOTLB

    switches= [HW,M68k]

    diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
    index 5857a937c637..23f86243defe 100644
    --- a/include/linux/swiotlb.h
    +++ b/include/linux/swiotlb.h
    @@ -15,6 +15,7 @@ enum swiotlb_force {
    SWIOTLB_NORMAL, /* Default - depending on HW DMA mask etc. */
    SWIOTLB_FORCE, /* swiotlb=force */
    SWIOTLB_NO_FORCE, /* swiotlb=noforce */
    + SWIOTLB_OFF, /* swiotlb=off */
    };

    /*
    diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
    index c10e855a03bc..d7a4a789c7d3 100644
    --- a/kernel/dma/swiotlb.c
    +++ b/kernel/dma/swiotlb.c
    @@ -126,6 +126,8 @@ setup_io_tlb_npages(char *str)
    } else if (!strcmp(str, "noforce")) {
    swiotlb_force = SWIOTLB_NO_FORCE;
    io_tlb_nslabs = 1;
    + } else if (!strcmp(str, "off")) {
    + swiotlb_force = SWIOTLB_OFF;
    }

    return 0;
    @@ -229,6 +231,9 @@ int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
    unsigned long i, bytes;
    size_t alloc_size;

    + if (swiotlb_force == SWIOTLB_OFF)
    + return 0;
    +
    bytes = nslabs << IO_TLB_SHIFT;

    io_tlb_nslabs = nslabs;
    @@ -284,6 +289,9 @@ swiotlb_init(int verbose)
    unsigned char *vstart;
    unsigned long bytes;

    + if (swiotlb_force == SWIOTLB_OFF)
    + goto out;
    +
    if (!io_tlb_nslabs) {
    io_tlb_nslabs = (default_size >> IO_TLB_SHIFT);
    io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
    @@ -302,6 +310,7 @@ swiotlb_init(int verbose)
    io_tlb_start = 0;
    }
    pr_warn("Cannot allocate buffer");
    +out:
    no_iotlb_memory = true;
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2021-03-18 20:19    [W:5.330 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site