• Rafael J. Wysocki's avatar
    PM / runtime: Rework pm_runtime_force_suspend/resume() · 4918e1f8
    Rafael J. Wysocki authored
    One of the limitations of pm_runtime_force_suspend/resume() is that
    if a parent driver wants to use these functions, all of its child
    drivers generally have to do that too because of the parent usage
    counter manipulations necessary to get the correct state of the parent
    during system-wide transitions to the working state (system resume).
    However, that limitation turns out to be artificial, so remove it.
    
    Namely, pm_runtime_force_suspend() only needs to update the children
    counter of its parent (if there's is a parent) when the device can
    stay in suspend after the subsequent system resume transition, as
    that counter is correct already otherwise.  Now, if the parent's
    children counter is not updated, it is not necessary to increment
    the parent's usage counter in that case any more, as long as the
    children counters of devices are checked along with their usage
    counters in order to decide whether or not the devices may be left
    in suspend after the subsequent system resume transition.
    
    Accordingly, modify pm_runtime_force_suspend() to only call
    pm_runtime_set_suspended() for devices whose usage and children
    counters are at the "no references" level (the runtime PM status
    of the device needs to be updated to "suspended" anyway in case
    this function is called once again for the same device during the
    transition under way), drop the parent usage counter incrementation
    from it and update pm_runtime_force_resume() to compensate for these
    changes.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    4918e1f8
runtime.c 47.1 KB