diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2010-05-21 17:30:12 +0200 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-05-22 10:06:35 +0200 |
commit | 9255f1deec151ac0e84871d06bc27406cb81f26f (patch) | |
tree | b4e454e2339207a1ce3bbe826f624c1f80323487 /drivers/dma | |
parent | sh: prevent the DMA driver from unloading, while in use (diff) | |
download | linux-9255f1deec151ac0e84871d06bc27406cb81f26f.tar.xz linux-9255f1deec151ac0e84871d06bc27406cb81f26f.zip |
sh: guard cookie consistency across termination in the DMA driver
If all descriptors on a channel are terminated or the channel is released,
update the completed cookie counter to match the last cookie. This prevents
inconsistency warning on resumed DMA operation.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/shdma.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/dma/shdma.c b/drivers/dma/shdma.c index 427d514796dd..a2a519fd2a24 100644 --- a/drivers/dma/shdma.c +++ b/drivers/dma/shdma.c @@ -722,6 +722,10 @@ static void sh_dmae_chan_ld_cleanup(struct sh_dmae_chan *sh_chan, bool all) { while (__ld_cleanup(sh_chan, all)) ; + + if (all) + /* Terminating - forgive uncompleted cookies */ + sh_chan->completed_cookie = sh_chan->common.cookie; } static void sh_chan_xfer_ld_queue(struct sh_dmae_chan *sh_chan) |