lkml.org 
[lkml]   [2022]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 037/112] PM: runtime: Redefine pm_runtime_release_supplier()
    Date
    From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    commit 07358194badf73e267289b40b761f5dc56928eab upstream.

    Instead of passing an extra bool argument to pm_runtime_release_supplier(),
    make its callers take care of triggering a runtime-suspend of the
    supplier device as needed.

    No expected functional impact.

    Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: 5.1+ <stable@vger.kernel.org> # 5.1+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/base/core.c | 3 ++-
    drivers/base/power/runtime.c | 20 +++++++++-----------
    include/linux/pm_runtime.h | 5 ++---
    3 files changed, 13 insertions(+), 15 deletions(-)

    --- a/drivers/base/core.c
    +++ b/drivers/base/core.c
    @@ -485,7 +485,8 @@ static void device_link_release_fn(struc
    /* Ensure that all references to the link object have been dropped. */
    device_link_synchronize_removal();

    - pm_runtime_release_supplier(link, true);
    + pm_runtime_release_supplier(link);
    + pm_request_idle(link->supplier);

    put_device(link->consumer);
    put_device(link->supplier);
    --- a/drivers/base/power/runtime.c
    +++ b/drivers/base/power/runtime.c
    @@ -308,13 +308,10 @@ static int rpm_get_suppliers(struct devi
    /**
    * pm_runtime_release_supplier - Drop references to device link's supplier.
    * @link: Target device link.
    - * @check_idle: Whether or not to check if the supplier device is idle.
    *
    - * Drop all runtime PM references associated with @link to its supplier device
    - * and if @check_idle is set, check if that device is idle (and so it can be
    - * suspended).
    + * Drop all runtime PM references associated with @link to its supplier device.
    */
    -void pm_runtime_release_supplier(struct device_link *link, bool check_idle)
    +void pm_runtime_release_supplier(struct device_link *link)
    {
    struct device *supplier = link->supplier;

    @@ -327,9 +324,6 @@ void pm_runtime_release_supplier(struct
    while (refcount_dec_not_one(&link->rpm_active) &&
    atomic_read(&supplier->power.usage_count) > 0)
    pm_runtime_put_noidle(supplier);
    -
    - if (check_idle)
    - pm_request_idle(supplier);
    }

    static void __rpm_put_suppliers(struct device *dev, bool try_to_suspend)
    @@ -337,8 +331,11 @@ static void __rpm_put_suppliers(struct d
    struct device_link *link;

    list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
    - device_links_read_lock_held())
    - pm_runtime_release_supplier(link, try_to_suspend);
    + device_links_read_lock_held()) {
    + pm_runtime_release_supplier(link);
    + if (try_to_suspend)
    + pm_request_idle(link->supplier);
    + }
    }

    static void rpm_put_suppliers(struct device *dev)
    @@ -1807,7 +1804,8 @@ void pm_runtime_drop_link(struct device_
    return;

    pm_runtime_drop_link_count(link->consumer);
    - pm_runtime_release_supplier(link, true);
    + pm_runtime_release_supplier(link);
    + pm_request_idle(link->supplier);
    }

    static bool pm_runtime_need_not_resume(struct device *dev)
    --- a/include/linux/pm_runtime.h
    +++ b/include/linux/pm_runtime.h
    @@ -82,7 +82,7 @@ extern void pm_runtime_get_suppliers(str
    extern void pm_runtime_put_suppliers(struct device *dev);
    extern void pm_runtime_new_link(struct device *dev);
    extern void pm_runtime_drop_link(struct device_link *link);
    -extern void pm_runtime_release_supplier(struct device_link *link, bool check_idle);
    +extern void pm_runtime_release_supplier(struct device_link *link);

    extern int devm_pm_runtime_enable(struct device *dev);

    @@ -308,8 +308,7 @@ static inline void pm_runtime_get_suppli
    static inline void pm_runtime_put_suppliers(struct device *dev) {}
    static inline void pm_runtime_new_link(struct device *dev) {}
    static inline void pm_runtime_drop_link(struct device_link *link) {}
    -static inline void pm_runtime_release_supplier(struct device_link *link,
    - bool check_idle) {}
    +static inline void pm_runtime_release_supplier(struct device_link *link) {}

    #endif /* !CONFIG_PM */


    \
     
     \ /
      Last update: 2022-07-11 11:34    [W:4.084 / U:0.412 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site