Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3915072 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Vinod Koul
Browse files

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: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent b7a4fd53
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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)