• Lars-Peter Clausen's avatar
    dmaengine: Use dma_sg_len(sg) instead of sg->length · fdaf9c4b
    Lars-Peter Clausen authored
    sg->length may or may not contain the length of the dma region to transfer,
    depending on the architecture - dma_sg_len(sg) always will though. For the
    architectures which use the drivers modified by this patch it probably is the
    case that sg->length contains the dma transfer length. But to be consistent and
    future proof change them to use dma_sg_len.
    
    To quote Russel King:
    	sg->length is meaningless to something performing DMA.
    
    	In cases where sg_dma_len(sg) and sg->length are the same storage, then
    	there's no problem. But scatterlists _can_ (and one some architectures) do
    	split them - especially when you have an IOMMU which can allow you to
    	combine a scatterlist into fewer entries.
    
    	So, anything using sg->length for the size of a scatterlist's DMA transfer
    	_after_ a call to dma_map_sg() is almost certainly buggy.
    
    The patch has been generated using the following coccinelle patch:
    <smpl>
    @@
    struct scatterlist *sg;
    expression X;
    @@
    -sg[X].length
    +sg_dma_len(&sg[X])
    @@
    struct scatterlist *sg;
    @@
    -sg->length
    +sg_dma_len(sg)
    </smpl>
    Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarVinod Koul <vinod.koul@linux.intel.com>
    fdaf9c4b
imx-dma.c 31.4 KB