Hi, On Mon, Sep 10 2012, Sascha Hauer wrote: > On Fri, Sep 07, 2012 at 12:43:37PM +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. >> >> Signed-off-by: Javier Martin <javier.martin@xxxxxxxxxxxxxxxxx> >> --- >> Changes since v1: >> - Use DMA callbacks for reading and MMC irqs for writing instead >> of monitoring both irqs for each transfer. >> - Increase timeout to 10 seconds to give enough time to slow cards. >> > > Looks good now, thanks. > > Reviewed-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> Thanks, queued in mmc-next for 3.7. Vinod, would be good to add your Reviewed-by if you're happy with this patch now. - Chris. -- Chris Ball <cjb@xxxxxxxxxx> <http://printf.net/> One Laptop Per Child -- 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