Commit 7746ab0a authored by Ilya Yanok's avatar Ilya Yanok Committed by David S. Miller

davinci-cpdma: fix locking issue in cpdma_chan_stop

Free the channel lock before calling __cpdma_chan_process to prevent
dead lock.
Signed-off-by: default avatarIlya Yanok <yanok@emcraft.com>
Tested-by: default avatarAmeya Palande <2ameya@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2692ba61
......@@ -836,11 +836,13 @@ int cpdma_chan_stop(struct cpdma_chan *chan)
chan_write(chan, cp, CPDMA_TEARDOWN_VALUE);
/* handle completed packets */
spin_unlock_irqrestore(&chan->lock, flags);
do {
ret = __cpdma_chan_process(chan);
if (ret < 0)
break;
} while ((ret & CPDMA_DESC_TD_COMPLETE) == 0);
spin_lock_irqsave(&chan->lock, flags);
/* remaining packets haven't been tx/rx'ed, clean them up */
while (chan->head) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment