@@ -437,8 +437,20 @@ static dma_cookie_t rcar_dmac_tx_submit(struct dma_async_tx_descriptor *tx)
unsigned long flags;
dma_cookie_t cookie;
+
spin_lock_irqsave(&chan->lock, flags);
+ if (desc->async_tx.cookie != -EBUSY) {
+ /*
+ * If the descriptor is reused, it's currently part of a list.
+ * Hence it must be removed from that list first, before it can
+ * be added to the list of pending requests.
+ */
+ dev_dbg(chan->chan.device->dev, "chan%u: resubmit active desc %p\n",
+ chan->index, desc);
+ list_del(&desc->node);
+ }
+
cookie = dma_cookie_assign(tx);
dev_dbg(chan->chan.device->dev, "chan%u: submit #%d@%p\n",