PM regression with commit 5de85b9d57ab PM runtime re-init in v4.5-rc1
Rafael J. Wysocki
rafael at kernel.org
Mon Feb 1 15:10:43 PST 2016
On Mon, Feb 1, 2016 at 11:29 PM, Tony Lindgren <tony at atomide.com> wrote:
> * Rafael J. Wysocki <rafael at kernel.org> [160201 14:18]:
>> On Mon, Feb 1, 2016 at 11:06 PM, Tony Lindgren <tony at atomide.com> wrote:
>> > --- a/drivers/base/power/runtime.c
>> > +++ b/drivers/base/power/runtime.c
>> > @@ -1419,17 +1419,25 @@ void pm_runtime_init(struct device *dev)
>> > */
>> > void pm_runtime_reinit(struct device *dev)
>> > {
>> > - if (!pm_runtime_enabled(dev)) {
>> > - if (dev->power.runtime_status == RPM_ACTIVE)
>> > + if (pm_runtime_enabled(dev))
>> > + return;
>> > +
>> > + if (dev->power.runtime_status == RPM_ACTIVE) {
>> > + if (dev->power.use_autosuspend) {
>> > + __pm_runtime_use_autosuspend(dev, false);
>> > + pm_runtime_suspend(dev);
>>
>> This won't work, because runtime PM is disabled at this point.
>
> Hmm right OK. It does work from idling the hardware point
> of view though..
pm_runtime_suspend() with runtime PM disabled is a NOP. It will do
nothing and return -EACCES.
>> What about doing this instead:
>>
>> if (dev->power.use_autosuspend)
>> __pm_runtime_use_autosuspend(dev, false);
>>
>> pm_runtime_set_suspended(dev);
>
> ..while this does not work. The hardware is never idled
> in this case.
I'm not sure what you mean. pm_runtime_set_suspended() sets the
status to RPM_SUSPENDED for devices with runtime PM disabled. It has
nothing to do with "idling" in principle.
> What else does __pm_runtime_use_autosuspend() set initially
> that changes things here?
The usage counter, if the delay is negative.
I'll look at this in detail, but not right now, sorry. I'm working on
something else ATM and I was hoping that Ulf would be able to figure
out what's going on here.
Thanks,
Rafael
More information about the linux-arm-kernel
mailing list