lkml.org 
[lkml]   [2014]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/3][Resend] PM / runtime: Routine for checking device status during system suspend
    Date
    From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    Add a new helper routine, pm_runtime_enabled_and_suspended(), to
    allow subsystems (or PM domains) to check the runtime PM status of
    devices during system suspend (possibly to avoid resuming those
    devices upfront at that time).

    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    ---
    drivers/base/power/runtime.c | 28 ++++++++++++++++++++++++++++
    include/linux/pm_runtime.h | 2 ++
    2 files changed, 30 insertions(+)

    Index: linux-pm/include/linux/pm_runtime.h
    ===================================================================
    --- linux-pm.orig/include/linux/pm_runtime.h
    +++ linux-pm/include/linux/pm_runtime.h
    @@ -53,6 +53,7 @@ extern unsigned long pm_runtime_autosusp
    extern void pm_runtime_update_max_time_suspended(struct device *dev,
    s64 delta_ns);
    extern void pm_runtime_set_memalloc_noio(struct device *dev, bool enable);
    +extern bool pm_runtime_enabled_and_suspended(struct device *dev);

    static inline bool pm_children_suspended(struct device *dev)
    {
    @@ -161,6 +162,7 @@ static inline unsigned long pm_runtime_a
    struct device *dev) { return 0; }
    static inline void pm_runtime_set_memalloc_noio(struct device *dev,
    bool enable){}
    +static inline bool pm_runtime_enabled_and_suspended(struct device *dev) { return false; }

    #endif /* !CONFIG_PM_RUNTIME */

    Index: linux-pm/drivers/base/power/runtime.c
    ===================================================================
    --- linux-pm.orig/drivers/base/power/runtime.c
    +++ linux-pm/drivers/base/power/runtime.c
    @@ -1194,6 +1194,34 @@ void pm_runtime_enable(struct device *de
    EXPORT_SYMBOL_GPL(pm_runtime_enable);

    /**
    + * pm_runtime_enabled_and_suspended - Check runtime PM status of a device.
    + * @dev: Device to handle.
    + *
    + * This routine is to be executed during system suspend only, after
    + * device_prepare() has been executed for @dev.
    + *
    + * Return false if runtime PM is disabled for the device. Otherwise, wait
    + * for pending transitions to complete and check the runtime PM status of the
    + * device after that. Return true if it is RPM_SUSPENDED.
    + */
    +bool pm_runtime_enabled_and_suspended(struct device *dev)
    +{
    + unsigned long flags;
    + bool ret;
    +
    + spin_lock_irqsave(&dev->power.lock, flags);
    + if (dev->power.disable_depth) {
    + ret = false;
    + } else {
    + __pm_runtime_barrier(dev);
    + ret = pm_runtime_status_suspended(dev);
    + }
    + spin_unlock_irqrestore(&dev->power.lock, flags);
    + return ret;
    +}
    +EXPORT_SYMBOL_GPL(pm_runtime_enabled_and_suspended);
    +
    +/**
    * pm_runtime_forbid - Block runtime PM of a device.
    * @dev: Device to handle.
    *


    \
     
     \ /
      Last update: 2014-02-17 01:21    [W:2.750 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site