dmaengine: virt-dma: store result on dma descriptor

This allows each virtual channel to store information about each transfer
that completed, i.e. which transfer succeeded (or which failed) and if
there was any residue data on each (completed) transfer.

Signed-off-by: Alexandru Ardelean <[email protected]>
Signed-off-by: Vinod Koul <[email protected]>
This commit is contained in:
Alexandru Ardelean authored and Vinod Koul committed 2019-06-14 11:22:43 +05:30
1 parent a08a9645a3
commit 09d5b702b0
2 files changed
+6 -2

No files matched your search

+2 -2
View File
@@ -101,7 +101,7 @@ static void vchan_complete(unsigned long arg)
}
spin_unlock_irq(&vc->lock);
dmaengine_desc_callback_invoke(&cb, NULL);
dmaengine_desc_callback_invoke(&cb, &vd->tx_result);
list_for_each_entry_safe(vd, _vd, &head, node) {
dmaengine_desc_get_callback(&vd->tx, &cb);
@@ -109,7 +109,7 @@ static void vchan_complete(unsigned long arg)
list_del(&vd->node);
vchan_vdesc_fini(vd);
dmaengine_desc_callback_invoke(&cb, NULL);
dmaengine_desc_callback_invoke(&cb, &vd->tx_result);
}
}
+4
View File
@@ -17,6 +17,7 @@
struct virt_dma_desc {
struct dma_async_tx_descriptor tx;
struct dmaengine_result tx_result;
/* protected by vc.lock */
struct list_head node;
};
@@ -65,6 +66,9 @@ static inline struct dma_async_tx_descriptor *vchan_tx_prep(struct virt_dma_chan
vd->tx.tx_submit = vchan_tx_submit;
vd->tx.desc_free = vchan_tx_desc_free;
vd->tx_result.result = DMA_TRANS_NOERROR;
vd->tx_result.residue = 0;
spin_lock_irqsave(&vc->lock, flags);
list_add_tail(&vd->node, &vc->desc_allocated);
spin_unlock_irqrestore(&vc->lock, flags);