• Joao Pinto's avatar
    Avoid hw_desc array overrun in dw-axi-dmac · 333e11bf
    Joao Pinto authored
    
    
    I have a use case where nr_buffers = 3 and in which each descriptor is composed by 3
    segments, resulting in the DMA channel descs_allocated to be 9. Since axi_desc_put()
    handles the hw_desc considering the descs_allocated, this scenario would result in a
    kernel panic (hw_desc array will be overrun).
    
    To fix this, the proposal is to add a new member to the axi_dma_desc structure,
    where we keep the number of allocated hw_descs (axi_desc_alloc()) and use it in
    axi_desc_put() to handle the hw_desc array correctly.
    
    Additionally I propose to remove the axi_chan_start_first_queued() call after completing
    the transfer, since it was identified that unbalance can occur (started descriptors can
    be interrupted and transfer ignored due to DMA channel not being enabled).
    Signed-off-by: default avatarJoao Pinto <jpinto@synopsys.com>
    Link: https://lore.kernel.org/r/1711536564-12919-1-git-send-email-jpinto@synopsys.com
    
    Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
    333e11bf
dw-axi-dmac.h 11.9 KB