static int usb_dmac_chan_terminate_all(struct dma_chan *chan)
 {
        struct usb_dmac_chan *uchan = to_usb_dmac_chan(chan);
-       struct usb_dmac_desc *desc;
+       struct usb_dmac_desc *desc, *_desc;
        unsigned long flags;
        LIST_HEAD(head);
        LIST_HEAD(list);
        if (uchan->desc)
                uchan->desc = NULL;
        list_splice_init(&uchan->desc_got, &list);
-       list_for_each_entry(desc, &list, node)
+       list_for_each_entry_safe(desc, _desc, &list, node)
                list_move_tail(&desc->node, &uchan->desc_freed);
        spin_unlock_irqrestore(&uchan->vc.lock, flags);
        vchan_dma_desc_free_list(&uchan->vc, &head);