• Tomasz Figa's avatar
    ASoC: Samsung: Do not queue cyclic buffers multiple times · 9b9ae16a
    Tomasz Figa authored
    The legacy S3C-DMA API required every period of a cyclic buffer to be
    queued separately. After conversion of Samsung ASoC to Samsung DMA
    wrappers somebody made an assumption that the same is needed for DMA
    engine API, which is not true.
    
    In effect, Samsung ASoC DMA code was queuing the whole cyclic buffer
    multiple times with a shift of one period per iteration, leading to:
      a) severe memory waste - up to 13x times more DMA transfer descriptors
         are allocated than needed,
      b) possible memory corruption, because further cyclic buffers were out
         of the original buffers, due to the offset.
    
    This patch fixes this problem by making the legacy S3C-DMA API use the
    same semantics as DMA engine (the whole cyclic buffer is enqueued at
    once) and modifying users of Samsung DMA wrappers in cyclic mode to
    behave appropriately.
    Signed-off-by: default avatarTomasz Figa <tomasz.figa@gmail.com>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarMark Brown <broonie@linaro.org>
    9b9ae16a
dma.c 11.1 KB