|
@@ -86,7 +86,7 @@ EXPORT_SYMBOL_GPL(vchan_find_desc);
|
|
|
static void vchan_complete(unsigned long arg)
|
|
|
{
|
|
|
struct virt_dma_chan *vc = (struct virt_dma_chan *)arg;
|
|
|
- struct virt_dma_desc *vd;
|
|
|
+ struct virt_dma_desc *vd, *_vd;
|
|
|
struct dmaengine_desc_callback cb;
|
|
|
LIST_HEAD(head);
|
|
|
|
|
@@ -103,8 +103,7 @@ static void vchan_complete(unsigned long arg)
|
|
|
|
|
|
dmaengine_desc_callback_invoke(&cb, NULL);
|
|
|
|
|
|
- while (!list_empty(&head)) {
|
|
|
- vd = list_first_entry(&head, struct virt_dma_desc, node);
|
|
|
+ list_for_each_entry_safe(vd, _vd, &head, node) {
|
|
|
dmaengine_desc_get_callback(&vd->tx, &cb);
|
|
|
|
|
|
list_del(&vd->node);
|
|
@@ -119,9 +118,9 @@ static void vchan_complete(unsigned long arg)
|
|
|
|
|
|
void vchan_dma_desc_free_list(struct virt_dma_chan *vc, struct list_head *head)
|
|
|
{
|
|
|
- while (!list_empty(head)) {
|
|
|
- struct virt_dma_desc *vd = list_first_entry(head,
|
|
|
- struct virt_dma_desc, node);
|
|
|
+ struct virt_dma_desc *vd, *_vd;
|
|
|
+
|
|
|
+ list_for_each_entry_safe(vd, _vd, head, node) {
|
|
|
if (dmaengine_desc_test_reuse(&vd->tx)) {
|
|
|
list_move_tail(&vd->node, &vc->desc_allocated);
|
|
|
} else {
|