All of lore.kernel.org
 help / color / mirror / Atom feed
From: sugar zhang <sugar.zhang@rock-chips.com>
To: Vinod Koul <vkoul@kernel.org>
Cc: Huibin Hong <huibin.hong@rock-chips.com>,
	dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] dmaengine: pl330: Fix unbalanced runtime PM
Date: Sun, 17 Apr 2022 21:53:23 +0800	[thread overview]
Message-ID: <5f13aa47-92cd-6c71-66f5-c5513a36b277@rock-chips.com> (raw)
In-Reply-To: <YlQxy0e/39M4xTdL@matsya>

Hi Vinod,

在 2022/4/11 21:48, Vinod Koul 写道:
> On 26-03-22, 20:16, Sugar Zhang wrote:
>> This driver use runtime PM autosuspend mechanism to manager clk.
>>
>>    pm_runtime_use_autosuspend(&adev->dev);
>>    pm_runtime_set_autosuspend_delay(&adev->dev, PL330_AUTOSUSPEND_DELAY);
>>
>> So, after ref count reached to zero, it will enter suspend
>> after the delay time elapsed.
>>
>> The unbalanced PM:
>>
>> * May cause dmac the next start failed.
>> * May cause dmac read unexpected state.
>> * May cause dmac stall if power down happen at the middle of the transfer.
>>    e.g. may lose ack from AXI bus and stall.
>>
>> Considering the following situation:
>>
>>        DMA TERMINATE               TASKLET ROUTINE
>>              |                            |
>>              |                       issue_pending
>>              |                            |
>>              |                     pch->active = true
>>              |                       pm_runtime_get
>>    pm_runtime_put(if active)              |
>>      pch->active = false                  |
>>              |                      work_list empty
>>              |                            |
>>              |                     pm_runtime_put(force)
> maybe unconditional is a better word than force here?
okay, will do in v2.
>
>>              |                            |
>>
>> At this point, it's unbalanced(1 get / 2 put).
>>
>> After this patch:
>>
>>        DMA TERMINATE               TASKLET ROUTINE
>>              |                            |
>>              |                       issue_pending
>>              |                            |
>>              |                     pch->active = true
>>              |                       pm_runtime_get
>>    pm_runtime_put(if active)              |
>>      pch->active = false                  |
>>              |                      work_list empty
>>              |                            |
>>              |                   pm_runtime_put(if active)
>>              |                            |
>>
>> Now, it's balanced(1 get / 1 put).
>>
>> Fixes:
>> commit 5c9e6c2b2ba3 ("dmaengine: pl330: Fix runtime PM support for terminated transfers")
>> commit ae43b3289186 ("ARM: 8202/1: dmaengine: pl330: Add runtime Power Management support v12")
> That is not the right way for Fixes tag

like this?

Fixes: 5c9e6c2b2ba3 ("dmaengine: pl330: Fix runtime PM support for terminated transfers")
Fixes: ae43b3289186 ("ARM: 8202/1: dmaengine: pl330: Add runtime Power Management support v12")

>> Signed-off-by: Huibin Hong <huibin.hong@rock-chips.com>
>> Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
>> ---
>>
>>   drivers/dma/pl330.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
>> index 858400e..ccd430e 100644
>> --- a/drivers/dma/pl330.c
>> +++ b/drivers/dma/pl330.c
>> @@ -2084,7 +2084,7 @@ static void pl330_tasklet(struct tasklet_struct *t)
>>   		spin_lock(&pch->thread->dmac->lock);
>>   		_stop(pch->thread);
>>   		spin_unlock(&pch->thread->dmac->lock);
>> -		power_down = true;
>> +		power_down = pch->active;
>>   		pch->active = false;
>>   	} else {
>>   		/* Make sure the PL330 Channel thread is active */
>> -- 
>> 2.7.4

-- 
Best Regards!
张学广/Sugar
瑞芯微电子股份有限公司
Rockchip Electronics Co., Ltd.


  reply	other threads:[~2022-04-17 13:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-26 12:16 [PATCH] dmaengine: pl330: Fix unbalanced runtime PM Sugar Zhang
2022-04-11 13:48 ` Vinod Koul
2022-04-17 13:53   ` sugar zhang [this message]
2022-04-20 10:15     ` Vinod Koul

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=5f13aa47-92cd-6c71-66f5-c5513a36b277@rock-chips.com \
    --to=sugar.zhang@rock-chips.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=huibin.hong@rock-chips.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.