Hi Vinod, On 14 September 2012 04:52, Vinod Koul <vinod.koul@xxxxxxxxxxxxxxx> wrote: > On Fri, 2012-09-07 at 12:43 +0200, Javier Martin wrote: >> >> The problem can be easily reproduced using a script that loops >> copying a file in an SD card to another place in the same SD card >> and its related to read transfers. This only happens with DMA enabled. >> >> This is related to the fact that, when reading, an MMC irq signals >> the fact that all data from the SD card has been copied to the >> internal buffers. However, it doesn't signal whether the DMA transfer >> that is in charge of moving data from these internal buffers to RAM >> has finished or not. Thus, calling dmaengine_terminate_all() in the >> MMC irq routine can cancel an ongoing DMA transfer leaving some data >> in the internal buffers that produces an accumulative effect which, >> in the end, blocks a read data transfer forever. >> >> The following patch watches DMA irq for reading and MMC irqs for >> writing transfers. The 'dangerous' usage of dmaengine_terminate_all() >> is removed and a timeout of 10 seconds is added so that the MMC won't >> block forever anymore. > For a normal transactions why should you call dmaengine_terminate_all(). Agree. In fact, this patch fixes that. > This should be called when you doing abort or cleanup in some erranous > situation. After this patch, dmaengine_terminate_all() will only be called if a DMA transfer lasts more than 10 seconds, which is an explicit error/abort that can happen sometimes (ie. when an SD card is worn out). > why was it called in first place? I don't know, because I didn't write the original support but it's not relevant because this patch removes the incorrect use of dmaengine_terminate_all(). Since you took the time to review the patch, could you please give me your ack too in case you find everything seems fine? Regards. -- Javier Martin Vista Silicon S.L. CDTUC - FASE C - Oficina S-345 Avda de los Castros s/n 39005- Santander. Cantabria. Spain +34 942 25 32 60 www.vista-silicon.com -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html