lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 31 Jan 2020 17:22:53 +0300 From: Dmitry Osipenko <digetx@...il.com> To: Jon Hunter <jonathanh@...dia.com>, Laxman Dewangan <ldewangan@...dia.com>, Vinod Koul <vkoul@...nel.org>, Dan Williams <dan.j.williams@...el.com>, Thierry Reding <thierry.reding@...il.com>, Michał Mirosław <mirq-linux@...e.qmqm.pl> Cc: dmaengine@...r.kernel.org, linux-tegra@...r.kernel.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH v6 11/16] dmaengine: tegra-apb: Keep clock enabled only during of DMA transfer 31.01.2020 12:02, Jon Hunter пишет: > > 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. I took another look and seems my current v6 should be more correct because: 1. If "busy" is unset in tegra_dma_stop(), then the RPM should be put there since tegra_dma_terminate_all() won't put RPM in this case: if (!tdc->busy) goto skip_dma_stop; 2. We can't move the "busy" unsetting into the terminate because then tegra_dma_stop() will be invoked twice. Although, one option could be to remove the tegra_dma_stop() from the error paths of handle_continuous_head_request(), but I'm not sure that this is correct to do.
Powered by blists - more mailing lists