dmaengine: virt-dma: Add missing locking
Originally freeing descriptors was split into a locked and an unlocked part. The locked part in vchan_get_all_descriptors() collected all descriptors on a separate list_head. This was done to allow iterating over that new list in vchan_dma_desc_free_list() without a lock held. This became broken in 13bb26ae ("dmaengine: virt-dma: don't always free descriptor upon completion"). With this commit vchan_dma_desc_free_list() no longer exclusively operates on the separate list, but starts to put descriptors which can be reused back on &vc->desc_allocated. This list operation should have been locked, but wasn't. In the mean time drivers started to call vchan_dma_desc_free_list() with their lock held so that we now have the situation that vchan_dma_desc_free_list() is called locked from some drivers and unlocked from others. To clean this up we have to do two things: 1. Add missing locking in vchan_dma_desc_free_list() 2. Make sure drivers call vchan_dma_desc_free_list() unlocked This needs to be done atomically, so in this patch the locking is added and all drivers are fixed. Signed-off-by:Sascha Hauer <s.hauer@pengutronix.de> Reviewed-by:
Peter Ujfalusi <peter.ujfalusi@ti.com> Tested-by:
Peter Ujfalusi <peter.ujfalusi@ti.com> Reviewed-by:
Green Wan <green.wan@sifive.com> Tested-by:
Green Wan <green.wan@sifive.com> Link: https://lore.kernel.org/r/20191216105328.15198-3-s.hauer@pengutronix.de Signed-off-by:
Vinod Koul <vkoul@kernel.org>
Showing
- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c 2 additions, 6 deletionsdrivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
- drivers/dma/mediatek/mtk-uart-apdma.c 2 additions, 1 deletiondrivers/dma/mediatek/mtk-uart-apdma.c
- drivers/dma/owl-dma.c 2 additions, 1 deletiondrivers/dma/owl-dma.c
- drivers/dma/s3c24xx-dma.c 11 additions, 11 deletionsdrivers/dma/s3c24xx-dma.c
- drivers/dma/sf-pdma/sf-pdma.c 2 additions, 2 deletionsdrivers/dma/sf-pdma/sf-pdma.c
- drivers/dma/sun4i-dma.c 2 additions, 1 deletiondrivers/dma/sun4i-dma.c
- drivers/dma/virt-dma.c 4 additions, 0 deletionsdrivers/dma/virt-dma.c
Please register or sign in to comment