dmaengine.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Osipenko <digetx@gmail.com>
To: "Jon Hunter" <jonathanh@nvidia.com>,
	"Laxman Dewangan" <ldewangan@nvidia.com>,
	"Vinod Koul" <vkoul@kernel.org>,
	"Dan Williams" <dan.j.williams@intel.com>,
	"Thierry Reding" <thierry.reding@gmail.com>,
	"Michał Mirosław" <mirq-linux@rere.qmqm.pl>
Cc: dmaengine@vger.kernel.org, linux-tegra@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 11/16] dmaengine: tegra-apb: Keep clock enabled only during of DMA transfer
Date: Sat, 1 Feb 2020 18:13:50 +0300	[thread overview]
Message-ID: <bf459b54-fa4c-b0ff-0af8-b7cb66b0a43c@gmail.com> (raw)
In-Reply-To: <1b64a3c6-a8b9-34d7-96cc-95b93ca1a392@gmail.com>

31.01.2020 17:22, Dmitry Osipenko пишет:
> 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.

Jon, I realized that my v6 variant is wrong too because
tegra_dma_terminate_all() -> tdc->isr_handler() will put RPM, and thus,
the RPM enable-count will be wrecked in this case.

I'm now leaning to adopt yours variant and simply remove the
tegra_dma_stop() from handle_continuous_head_request() because there
shouldn't be any harm in keeping DMA active in the case of error
condition. Besides, these error conditions are very extreme cases that
should never happen in practice.

The "list_empty(&tdc->pending_sg_req)" error seems couldn't ever happen
at all, I'll remove it in v7.

  reply	other threads:[~2020-02-01 15:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-30  4:37 [PATCH v6 00/16] NVIDIA Tegra APB DMA driver fixes and improvements Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 01/16] dmaengine: tegra-apb: Fix use-after-free Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 02/16] dmaengine: tegra-apb: Prevent race conditions of tasklet vs free list Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 03/16] dmaengine: tegra-apb: Implement synchronization hook Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 04/16] dmaengine: tegra-apb: Prevent race conditions on channel's freeing Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 05/16] dmaengine: tegra-apb: Clean up tasklet releasing Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 06/16] dmaengine: tegra-apb: Use devm_platform_ioremap_resource Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 07/16] dmaengine: tegra-apb: Use devm_request_irq Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 08/16] dmaengine: tegra-apb: Fix coding style problems Dmitry Osipenko
2020-01-30 14:08   ` Jon Hunter
2020-01-30  4:37 ` [PATCH v6 09/16] dmaengine: tegra-apb: Remove unneeded initialization of tdc->config_init Dmitry Osipenko
2020-01-30 14:08   ` Jon Hunter
2020-01-30  4:37 ` [PATCH v6 10/16] dmaengine: tegra-apb: Remove assumptions about unavailable runtime PM Dmitry Osipenko
2020-01-30 14:09   ` Jon Hunter
2020-01-30 16:09     ` Dmitry Osipenko
2020-01-30  4:37 ` [PATCH v6 11/16] dmaengine: tegra-apb: Keep clock enabled only during of DMA transfer Dmitry Osipenko
2020-01-30 14:09   ` Jon Hunter
2020-01-30 16:11     ` Dmitry Osipenko
2020-01-30 18:45       ` Jon Hunter
2020-01-30 20:04         ` Dmitry Osipenko
2020-01-31  9:02           ` Jon Hunter
2020-01-31 14:22             ` Dmitry Osipenko
2020-02-01 15:13               ` Dmitry Osipenko [this message]
2020-02-03 11:37                 ` Jon Hunter
2020-02-03 16:24                   ` Dmitry Osipenko
2020-01-31  9:05   ` Jon Hunter
2020-01-30  4:38 ` [PATCH v6 12/16] dmaengine: tegra-apb: Clean up suspend-resume Dmitry Osipenko
2020-01-30 14:09   ` Jon Hunter
2020-01-30 16:08     ` Dmitry Osipenko
2020-01-30 18:06       ` Dmitry Osipenko
2020-01-30 18:26         ` Dmitry Osipenko
2020-01-30 18:58           ` Jon Hunter
2020-01-30 19:00   ` Jon Hunter
2020-01-30 20:06     ` Dmitry Osipenko
2020-01-30  4:38 ` [PATCH v6 13/16] dmaengine: tegra-apb: Add missing of_dma_controller_free Dmitry Osipenko
2020-01-30  4:38 ` [PATCH v6 14/16] dmaengine: tegra-apb: Allow to compile as a loadable kernel module Dmitry Osipenko
2020-01-30  4:38 ` [PATCH v6 15/16] dmaengine: tegra-apb: Remove MODULE_ALIAS Dmitry Osipenko
2020-01-30  4:38 ` [PATCH v6 16/16] dmaengine: tegra-apb: Support COMPILE_TEST Dmitry Osipenko
2020-01-30 14:10   ` Jon Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bf459b54-fa4c-b0ff-0af8-b7cb66b0a43c@gmail.com \
    --to=digetx@gmail.com \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=jonathanh@nvidia.com \
    --cc=ldewangan@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mirq-linux@rere.qmqm.pl \
    --cc=thierry.reding@gmail.com \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).