FAILED: patch "[PATCH] PM: runtime: Redefine pm_runtime_release_supplier()" failed to apply to 5.4-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 07358194badf73e267289b40b761f5dc56928eab Mon Sep 17 00:00:00 2001
From: "Rafael J. Wysocki" <[email protected]>
Date: Mon, 27 Jun 2022 20:42:18 +0200
Subject: [PATCH] PM: runtime: Redefine pm_runtime_release_supplier()
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 <[email protected]>
Signed-off-by Rafael J. Wysocki <[email protected]>
Reviewed-by Greg Kroah-Hartman <[email protected]>
Cc 5.1+ <[email protected]> # 5.1+
drivers/base/core.c +2 -1
@@ -486,7 +486,8 @@ static void device_link_release_fn(struct work_struct *work)/* 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);
drivers/base/power/runtime.c +9 -11
@@ -308,13 +308,10 @@ static int rpm_get_suppliers(struct device *dev)/** * 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 device_link *link, bool check_idle)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 device *dev, bool try_to_suspend)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)
@@ -1838,7 +1835,8 @@ void pm_runtime_drop_link(struct device_link *link)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)
include/linux/pm_runtime.h +2 -3
@@ -88,7 +88,7 @@ extern void pm_runtime_get_suppliers(struct device *dev);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);
@@ -314,8 +314,7 @@ static inline void pm_runtime_get_suppliers(struct device *dev) {}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 */