On Sun, 2014-01-26 at 16:47 +0530, Vinod Koul wrote: > > > > > For these cases, I have been using suspend_late. Since the dmaengine > > > > > driver is > > > > > providing service to other clients (SPI), it needs to esnure that it > > > > > suspends > > > > > after SPI using suspend_late and resume using resume_early. That way > > > > > dma is > > > > > availble whenever the client is active > > > > > > > > suspend_late is working in context that interrupt handler may be > > > > invoked. Thus, to have DMA driver be properly shut down we have to > > > > wait / terminate possible ongoing transfer. > > > Well client is already suspended via .suspend. So where is the > > > transaction :) > > > > ...as I already wrote before we have no parent-child relationship > > between DMA and, for example, SPI. That means we may possible have the > > case when SPI's .suspend() will be called later than DMA's one. > > > > > > It seems for me all DMA drivers that are using > > > > system .suspend()/.resume() are potentially buggy. > > > Yup! > > > > So, we have to decide what to do with them. .suspend_late() still seems > > for me not the best approach. *Or* we have to check for ongoing > > transaction and do something with it. *Or* just shut down the device and > > rely on DMA transaction initiator that it handles the terminated > > transaction properly. > > As you clearly said, we dont have a parent-child relatation though we have big > dependency. I think this is true for DMA clients, i ran into similar situation > with i2c few days back! > > So only think which can give us a good system behaviour would be clients > getting > suspended first and then then service providing subsystems.
Agree. > (same reason why we > do dma driver loading and init much before others drivers) Yes, it would be done via deferred probe. > So yes in the .suspend callback of the client, it needs to > 1) abort any transactions it has > 2) make the client quiscent > > then the .late_suspend kicks in and suspend the core drivers like dma. > > This is how it has worked reliably for me in production systems. I am all ears > if we have a better and cleaner apprach to this problem :) Yes, summarize everything we discussed we have to: - provide suspend_late, resume_early callbacks in the DMA driver instead of *_noirq versions - ensure that all clients on our platforms follow the described scenario Chiau Ee, I think you may to change your patch accordingly. -- Andy Shevchenko <andriy.shevche...@linux.intel.com> Intel Finland Oy -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/