From: Kevin Hilman <khilman@deeprootsystems.com>
To: "Basak, Partha" <p-basak2@ti.com>
Cc: Paul Walmsley <paul@pwsan.com>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"Kalliguddi, Hema" <hemahk@ti.com>,
"Raja, Govindraj" <govindraj.raja@ti.com>,
"Varadarajan, Charulatha" <charu@ti.com>,
"Nayak, Rajendra" <rnayak@ti.com>,
"Cousson, Benoit" <b-cousson@ti.com>
Subject: Re: Issues with calling pm_runtime functions in platform_pm_suspend_noirq/IRQ disabled context.
Date: Wed, 04 Aug 2010 15:32:22 -0700 [thread overview]
Message-ID: <87sk2u9fgp.fsf@deeprootsystems.com> (raw)
In-Reply-To: <87tynaaw4r.fsf@deeprootsystems.com> (Kevin Hilman's message of "Wed, 04 Aug 2010 14:47:00 -0700")
Kevin Hilman <khilman@deeprootsystems.com> writes:
> "Basak, Partha" <p-basak2@ti.com> writes:
>
>>> -----Original Message-----
>>> From: Kevin Hilman [mailto:khilman@deeprootsystems.com]
>>> Sent: Tuesday, August 03, 2010 11:06 PM
>>> To: Basak, Partha
>>> Cc: Paul Walmsley; linux-omap@vger.kernel.org; Kalliguddi, Hema; Raja,
>>> Govindraj; Varadarajan, Charulatha; Nayak, Rajendra; Cousson, Benoit
>>> Subject: Re: Issues with calling pm_runtime functions in
>>> platform_pm_suspend_noirq/IRQ disabled context.
>>>
>>> "Basak, Partha" <p-basak2@ti.com> writes:
>>>
>>> > Resending with the corrected mailing list
>>> >
>>> > Hello Kevin,
>>> >
>>> > I want to draw your attention to an issue the following patch
>>> > introduces. http://dev.omapzoom.org/?p=swarch/linux-omap-
>>> adv.git;a=commitdiff;h=8041359e18e49bf8a3d41f15894db9e476f3a8fc
>>>
>>> [...]
>>>
>>> > I believe, it is not correct to call the pm_runtime APIs from
>>> > interrupt locked context since the underlying functions
>>> > __pm_runtime_suspend & __pm_runtime_resume enable interrupts and call
>>> > schedule().
>>> >
>>> > Further, from a s/w layering standpoint, platform-bus is a deeper
>>> > layer than the Runtime layer, which the runtime layer calls into. So
>>> > it may not be correct to have this layer calling into pm_runtime(). It
>>> > should directly call omap_device APIs.
>>>
>>> The original version of this patch did directly call the omap_device
>>> APIs. However, Paul didn't like that approach and there were
>>> use-counting problems to handle as well (e.g. if a driver was not (yet)
>>> in use, it would already be disabled, and a suspend would trigger an
>>> omap_device_disable() which would fail since device was already
>>> disabled.)
>>>
>>> Paul and I agreed that this current approach would solve the
>>> use-counting problems, but you're correct in that it introduces
>>> new problems as these functions can _possibly_ sleep/schedule.
>>>
>>> That being said, have you actually seen problems here? I would like
>>> to see how they are triggered?
>>
>> Scenario 1:
>>
>> Consider the case where a driver has already called
>> pm_runtime_put_sync as part of aggressive clock cutting
>> scheme. Subsequently, when system suspend is called,
>> pm_runtime_put_sync is called again.
>
>> Due to atomic_dec_and_test check
>> on usage_count, the second call goes through w/o error.
>
> I don't think you're fully understanding the point of the put/get in the
> suspend/resume path.
>
> The reason for the 'put' in the suspend path is because the PM core has
> done a 'get' in dpm_prepare() [c.f. drivers/base/power/main.c] so that
> runtime PM transitions are prevented during suspend/resume.
>
> On OMAP, we want to allow those transitions to happen so we can use the
> same runtime PM calls in the idle and suspend paths.
>
>> At System resume, pm_runtime_get_sync is called twice, once by resume,
>> once by the driver itself.
>
> Yes, but there is a 'put_sync' in between those done by the PM core
> during resume (c.f. dpm_complete() in drivers/base/power/main.c]
>
>> Because of the extra reference count, the
>> aggressive clock control by the driver is broken, as call to put_sync
>> by a driver reduces to usage_count to 1. As a result clock transition
>> in Idle-path is broken.
A closer look here, and there is indeed a bug in the _resume_noirq()
method. The get here needs to be a _noresume version to match what is
done in the PM core.
This doesn't change the use count, but it does change whether the device
is actually awoken by this 'get' or not. This get should never actually
awake the device. It is only there to compensate for what the PM core
does.
Can you try this patch? Will post a version to the list with
changelog shortly.
Kevin
diff --git a/arch/arm/mach-omap2/pm_bus.c b/arch/arm/mach-omap2/pm_bus.c
index bab0186..01bbe65 100644
--- a/arch/arm/mach-omap2/pm_bus.c
+++ b/arch/arm/mach-omap2/pm_bus.c
@@ -90,7 +90,7 @@ int platform_pm_resume_noirq(struct device *dev)
* method so that the runtime PM usage counting is in the same
* state it was when suspend was called.
*/
- pm_runtime_get_sync(dev);
+ pm_runtime_get_noresume(dev);
if (!drv)
return 0;
next prev parent reply other threads:[~2010-08-04 22:32 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-03 13:49 Issues with calling pm_runtime functions in platform_pm_suspend_noirq/IRQ disabled context Basak, Partha
2010-08-03 17:35 ` Kevin Hilman
2010-08-04 13:19 ` Basak, Partha
2010-08-04 21:47 ` Kevin Hilman
2010-08-04 22:32 ` Kevin Hilman [this message]
2010-08-04 23:20 ` Kevin Hilman
2010-08-06 14:22 ` Basak, Partha
2010-08-06 14:37 ` Basak, Partha
2010-08-04 23:35 ` Kevin Hilman
2010-08-06 14:21 ` Basak, Partha
[not found] <B85A65D85D7EB246BE421B3FB0FBB59301E7ED0FDF@dbde02.ent.ti.com>
[not found] ` <alpine.DEB.2.00.1008061305360.5732@utopia.booyaka.com>
[not found] ` <B85A65D85D7EB246BE421B3FB0FBB59301E800BD63@dbde02.ent.ti.com>
2010-08-09 7:50 ` Paul Walmsley
2010-08-09 10:31 ` Basak, Partha
2010-08-09 15:31 ` Kevin Hilman
2010-08-09 15:39 ` Shilimkar, Santosh
2010-08-09 15:55 ` Kevin Hilman
2010-08-09 16:13 ` Shilimkar, Santosh
2010-08-09 16:25 ` Shilimkar, Santosh
2010-08-10 14:59 ` Basak, Partha
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=87sk2u9fgp.fsf@deeprootsystems.com \
--to=khilman@deeprootsystems.com \
--cc=b-cousson@ti.com \
--cc=charu@ti.com \
--cc=govindraj.raja@ti.com \
--cc=hemahk@ti.com \
--cc=linux-omap@vger.kernel.org \
--cc=p-basak2@ti.com \
--cc=paul@pwsan.com \
--cc=rnayak@ti.com \
/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