lkml.org 
[lkml]   [2009]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -tip 2/3] dma-debug: use sg_dma_len accessor
    Date
    debug_dma_map_sg() and debug_dma_unmap_sg() use length in struct
    scatterlist while debug_dma_sync_sg_for_cpu() and
    debug_dma_sync_sg_for_device() use dma_length. This causes bugs
    warnings on some IOMMU implementations since these values are not
    same; the length doesn't represent the dma length.

    We always need to use sg_dma_len() accessor to get the dma length of a
    scatterlist entry.

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

    diff --git a/lib/dma-debug.c b/lib/dma-debug.c
    index 64aaa96..df9e475 100644
    --- a/lib/dma-debug.c
    +++ b/lib/dma-debug.c
    @@ -783,7 +783,7 @@ void debug_dma_map_sg(struct device *dev, struct scatterlist *sg,
    entry->type = dma_debug_sg;
    entry->dev = dev;
    entry->paddr = sg_phys(s);
    - entry->size = s->length;
    + entry->size = sg_dma_len(s);
    entry->dev_addr = sg_dma_address(s);
    entry->direction = direction;
    entry->sg_call_ents = nents;
    @@ -791,7 +791,7 @@ void debug_dma_map_sg(struct device *dev, struct scatterlist *sg,

    if (!PageHighMem(sg_page(s))) {
    check_for_stack(dev, sg_virt(s));
    - check_for_illegal_area(dev, sg_virt(s), s->length);
    + check_for_illegal_area(dev, sg_virt(s), sg_dma_len(s));
    }

    add_dma_entry(entry);
    @@ -817,7 +817,7 @@ void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist,
    .dev = dev,
    .paddr = sg_phys(s),
    .dev_addr = sg_dma_address(s),
    - .size = s->length,
    + .size = sg_dma_len(s),
    .direction = dir,
    .sg_call_ents = 0,
    };
    @@ -940,7 +940,7 @@ void debug_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
    return;

    for_each_sg(sg, s, nelems, i) {
    - check_sync(dev, sg_dma_address(s), s->dma_length, 0,
    + check_sync(dev, sg_dma_address(s), sg_dma_len(s), 0,
    direction, true);
    }
    }
    @@ -956,7 +956,7 @@ void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
    return;

    for_each_sg(sg, s, nelems, i) {
    - check_sync(dev, sg_dma_address(s), s->dma_length, 0,
    + check_sync(dev, sg_dma_address(s), sg_dma_len(s), 0,
    direction, false);
    }
    }
    --
    1.6.0.6


    \
     
     \ /
      Last update: 2009-05-27 03:27    [W:0.024 / U:150.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site