|
@@ -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)
|