On Wed, May 20, 2020 at 7:02 PM Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> wrote: > > Hi Dinghao, > > On Wed, May 20, 2020 at 6:35 AM Dinghao Liu <dinghao.liu@xxxxxxxxxx> wrote: > > > > pm_runtime_get_sync() increments the runtime PM usage counter even > > the call returns an error code. Thus a pairing decrement is needed > > on the error handling path to keep the counter balanced. > > This is a very surprising behavior and I wonder if this should be > fixed in the PM core (or the required cleanup steps need to be called > out in the function description). It has been like that forever and it's intentional, because it allows certain pieces of code to do things like pm_runtime_get_sync(dev); /* do something regardless of whether or not PM-runtime is enabled for dev */ pm_runtime_put(dev); So I wouldn't really call it surprising. > I also see that a few drivers that > handle this situation correctly (?) call pm_runtime_put_noidle() > instead of pm_runtime_put_sync() in the error path. > > Rafael, do you have any guidance here? Feel free to improve the kerneldoc comment of __pm_runtime_resume(), although it is clear enough to me, and fix the callers that leak the refcount.