dmaengine: rcar-dmac: Fix spinlock issues in interrupt
The rcar_dmac_desc_put() function is called in interrupt context and must thus use spin_lock_irqsave() instead of spin_lock_irq(). Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Acked-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:

committed by
Vinod Koul

parent
b7a4fd53d2
commit
f39150720e
@@ -487,16 +487,16 @@ static int rcar_dmac_desc_alloc(struct rcar_dmac_chan *chan, gfp_t gfp)
|
||||
*
|
||||
* The descriptor must have been removed from the channel's lists before calling
|
||||
* this function.
|
||||
*
|
||||
* Locking: Must be called in non-atomic context.
|
||||
*/
|
||||
static void rcar_dmac_desc_put(struct rcar_dmac_chan *chan,
|
||||
struct rcar_dmac_desc *desc)
|
||||
{
|
||||
spin_lock_irq(&chan->lock);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
list_splice_tail_init(&desc->chunks, &chan->desc.chunks_free);
|
||||
list_add_tail(&desc->node, &chan->desc.free);
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
}
|
||||
|
||||
static void rcar_dmac_desc_recycle_acked(struct rcar_dmac_chan *chan)
|
||||
|
Reference in New Issue
Block a user