On Sat, Jun 17, 2017 at 9:32 AM, Tomasz Figa <tf...@chromium.org> wrote:
> On Sat, Jun 17, 2017 at 9:00 AM, Zhi, Yong <yong....@intel.com> wrote:
>>> On Thu, Jun 15, 2017 at 1:19 AM, Yong Zhi <yong....@intel.com> wrote:

>>> > +       /* Set Power */
>>> > +       r = pm_runtime_get_sync(dev);
>>> > +       if (r < 0) {
>>> > +               dev_err(dev, "failed to set imgu power\n");
>>>
>>> > +               pm_runtime_put(dev);
>>>
>>> I'm not sure it's a right thing to do.
>>> How did you test runtime PM counters in this case?
>>>
>>> > +               return r;
>>> > +       }

>> Actually I have not tested the error case, what the right way to do in your 
>> opinion? there is no checking of this function return in lot of the driver 
>> code, or simply returning the error code, I also saw examples to call either 
>> pm_runtime_put() or pm_runtime_put_noidle() in this case.
>
> Instead of speculating, if we inspect pm_runtime_get_sync() [1], we
> can see that it always causes the runtime PM counter to increment, but
> it never decrements it, even in case of error. So to keep things
> balanced, you need to call pm_runtime_put() in error path.
>
> It shouldn't matter if it's pm_runtime_put() or
> pm_runtime_put_noidle(), because of runtime PM semantics, which are
> explicitly specified [2] that after an error, no hardware state change
> is attempted until the state is explicitly reset by the driver with
> either pm_runtime_set_active() or pm_runtime_set_suspended().
>
> So, as far as I didn't miss some even more obscure bits of the runtime
> PM framework, current code is fine.

Indeed. Thanks for explanation. PM runtime is hard :-)
Previously I didn't meet (and actually never used) check for returning
code of pm_runtime_get*().

> [1] 
> http://elixir.free-electrons.com/linux/v4.11.6/source/include/linux/pm_runtime.h#L235
> and the main part:
> http://elixir.free-electrons.com/linux/v4.11.6/source/drivers/base/power/runtime.c#L1027
>
> [2] 
> http://elixir.free-electrons.com/linux/v4.11.6/source/Documentation/power/runtime_pm.txt#L128


-- 
With Best Regards,
Andy Shevchenko

Reply via email to