lkml.org 
[lkml]   [2008]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/3] swiotlb: add is_swiotlb_buffer helper function
    Date
    This adds is_swiotlb_buffer() helper function to see whether a buffer
    belongs to the swiotlb buffer or not.

    Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
    ---
    lib/swiotlb.c | 14 +++++++++-----
    1 files changed, 9 insertions(+), 5 deletions(-)

    diff --git a/lib/swiotlb.c b/lib/swiotlb.c
    index bf61c73..b5f5d11 100644
    --- a/lib/swiotlb.c
    +++ b/lib/swiotlb.c
    @@ -283,6 +283,11 @@ address_needs_mapping(struct device *hwdev, dma_addr_t addr)
    return (addr & ~mask) != 0;
    }

    +static int is_swiotlb_buffer(char *addr)
    +{
    + return addr >= io_tlb_start && addr < io_tlb_end;
    +}
    +
    /*
    * Allocates bounce buffer and returns its kernel virtual address.
    */
    @@ -508,8 +513,7 @@ swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
    dma_addr_t dma_handle)
    {
    WARN_ON(irqs_disabled());
    - if (!(vaddr >= (void *)io_tlb_start
    - && vaddr < (void *)io_tlb_end))
    + if (!is_swiotlb_buffer(vaddr))
    free_pages((unsigned long) vaddr, get_order(size));
    else
    /* DMA_TO_DEVICE to avoid memcpy in unmap_single */
    @@ -602,7 +606,7 @@ swiotlb_unmap_single_attrs(struct device *hwdev, dma_addr_t dev_addr,
    char *dma_addr = bus_to_virt(dev_addr);

    BUG_ON(dir == DMA_NONE);
    - if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
    + if (is_swiotlb_buffer(dma_addr))
    unmap_single(hwdev, dma_addr, size, dir);
    else if (dir == DMA_FROM_DEVICE)
    dma_mark_clean(dma_addr, size);
    @@ -632,7 +636,7 @@ swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
    char *dma_addr = bus_to_virt(dev_addr);

    BUG_ON(dir == DMA_NONE);
    - if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
    + if (is_swiotlb_buffer(dma_addr))
    sync_single(hwdev, dma_addr, size, dir, target);
    else if (dir == DMA_FROM_DEVICE)
    dma_mark_clean(dma_addr, size);
    @@ -663,7 +667,7 @@ swiotlb_sync_single_range(struct device *hwdev, dma_addr_t dev_addr,
    char *dma_addr = bus_to_virt(dev_addr) + offset;

    BUG_ON(dir == DMA_NONE);
    - if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
    + if (is_swiotlb_buffer(dma_addr))
    sync_single(hwdev, dma_addr, size, dir, target);
    else if (dir == DMA_FROM_DEVICE)
    dma_mark_clean(dma_addr, size);
    --
    1.5.5.GIT


    \
     
     \ /
      Last update: 2008-09-08 11:59    [W:0.022 / U:0.552 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site