summaryrefslogtreecommitdiff
path: root/drivers/lguest
diff options
context:
space:
mode:
authorDaniel Mack <zonque@gmail.com>2013-08-21 16:08:54 +0400
committerVinod Koul <vinod.koul@intel.com>2013-08-25 20:34:52 +0400
commitb721f9e800571ca724eed6f1956e58e8f1d47d7d (patch)
treea3fadd9386ddcabf89e8ec7df39d6bc71afe168a /drivers/lguest
parentb4d6d336762aea282921a3283f2a00c7e95d2bef (diff)
downloadlinux-b721f9e800571ca724eed6f1956e58e8f1d47d7d.tar.xz
dma: mmp_pdma: only complete one transaction from dma_do_tasklet()
Currently, when an interrupt has occured for a channel, the tasklet worker code will only look at the very last entry in the running list and complete its cookie, and then dispose the entire running chain. Hence, the first transaction's cookie will never complete. In fact, the interrupt we should handle will be the one related to the first descriptor in the chain with the ENDIRQEN bit set, so complete the second transaction that is in fact still running. As a result, the driver can't currently handle multiple transactions on one chanel, and it's likely that no drivers exist that rely on this feature. Fix this by walking the running_chain and look for the first descriptor that has the interrupt-enable bit set. Only queue descriptors up to that point for completion handling, while leaving the rest intact. Also, only make the channel idle if the list is completely empty after such a cycle. Signed-off-by: Daniel Mack <zonque@gmail.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/lguest')
0 files changed, 0 insertions, 0 deletions