• Robert Jarzmik's avatar
    dmaengine: virt-dma: don't always free descriptor upon completion · 13bb26ae
    Robert Jarzmik authored
    This patch attempts to enhance the case of a transfer submitted multiple
    times, and where the cost of creating the descriptors chain is not
    negligible.
    
    This happens with big video buffers (several megabytes, ie. several
    thousands of linked descriptors in one scatter-gather list). In these
    cases, a video driver would want to do :
     - tx = dmaengine_prep_slave_sg()
     - dma_engine_submit(tx);
     - dma_async_issue_pending()
     - wait for video completion
     - read video data (or not, skipping a frame is also possible)
     - dma_engine_submit(tx)
       => here, the descriptors chain recalculation will take time
       => the dma coherent allocation over and over might create holes in
          the dma pool, which is counter-productive.
     - dma_async_issue_pending()
     - etc ...
    
    In order to cope with this case, virt-dma is modified to prevent freeing
    the descriptors upon completion if DMA_CTRL_REUSE flag is set in the
    transfer.
    
    This patch is a respin of the former DMA_CTRL_ACK approach, which was
    reverted due to a regression in audio drivers.
    Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
    Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
    13bb26ae
virt-dma.h 4.39 KB