On 30/01/2020 20:04, Dmitry Osipenko wrote: ... >>> The tegra_dma_stop() should put RPM anyways, which is missed in yours >>> sample. Please see handle_continuous_head_request(). >> >> Yes and that is deliberate. The cyclic transfers the transfers *should* >> not stop until terminate_all is called. The tegra_dma_stop in >> handle_continuous_head_request() is an error condition and so I am not >> sure it is actually necessary to call pm_runtime_put() here. > > But then tegra_dma_stop() shouldn't unset the "busy" mark. True. >>> I'm also finding the explicit get/put a bit easier to follow in the >>> code, don't you think so? >> >> I can see that, but I was thinking that in the case of cyclic transfers, >> it should only really be necessary to call the get/put at the beginning >> and end. So in my mind there should only be two exit points which are >> the ISR handler for SG and terminate_all for SG and cyclic. > > Alright, I'll update this patch. Hmmm ... I am wondering if we should not mess with that and leave how you have it. -- nvpublic