• Rafael J. Wysocki's avatar
    PM: runtime: Capture device status before disabling runtime PM · c24efa67
    Rafael J. Wysocki authored
    In some cases (for example, during system-wide suspend and resume of
    devices) it is useful to know whether or not runtime PM has ever been
    enabled for a given device and, if so, what the runtime PM status of
    it had been right before runtime PM was disabled for it last time.
    
    For this reason, introduce a new struct dev_pm_info field called
    last_status that will be used for capturing the runtime PM status of
    the device when its power.disable_depth counter changes from 0 to 1.
    
    The new field will be set to RPM_INVALID to start with and whenever
    power.disable_depth changes from 1 to 0, so it will be valid only
    when runtime PM of the device is currently disabled, but it has been
    enabled at least once.
    
    Immediately use power.last_status in rpm_resume() to make it handle
    the case when PM runtime is disabled for the device, but its runtime
    PM status is RPM_ACTIVE more consistently.  Namely, make it return 1
    if power.last_status is also equal to RPM_ACTIVE in that case (the
    idea being that if the status was RPM_ACTIVE last time when
    power.disable_depth was changing from 0 to 1 and it is still
    RPM_ACTIVE, it can be assumed to reflect what happened to the device
    last time when it was using runtime PM) and -EACCES otherwise.
    
    Update the documentation to provide a description of last_status and
    change the description of pm_runtime_resume() in it to reflect the
    new behavior of rpm_active().
    
    While at it, rearrange the code in pm_runtime_enable() to be more
    straightforward and replace the WARN() macro in it with a pr_warn()
    invocation which is less disruptive.
    
    Link: https://lore.kernel.org/linux-pm/20211026222626.39222-1-ulf.hansson@linaro.org/t/#uReviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c24efa67
runtime_pm.rst 46.8 KB