Patch "PM: runtime: Improve path in rpm_idle() when no callback" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    PM: runtime: Improve path in rpm_idle() when no callback

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     pm-runtime-improve-path-in-rpm_idle-when-no-callback.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit bdf8c9e1261928cdc82fb80eec29415dec852717
Author: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Date:   Tue Jun 8 11:02:48 2021 +0200

    PM: runtime: Improve path in rpm_idle() when no callback
    
    [ Upstream commit 5a2bd1b1c64e1ac5627db3767ac465f18606315c ]
    
    When pm_runtime_no_callbacks() has been called for a struct device to set
    the dev->power.no_callbacks flag for it, it enables rpm_idle() to take a
    slightly quicker path by assuming that a ->runtime_idle() callback would
    have returned 0 to indicate success.
    
    A device that does not have the dev->power.no_callbacks flag set for it,
    may still be missing a corresponding ->runtime_idle() callback, in which
    case the slower path in rpm_idle() is taken. Let's improve the behaviour
    for this case, by aligning code to the quicker path.
    
    Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
    Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
    Stable-dep-of: bc80c2e438dc ("PM: runtime: Do not call __rpm_callback() from rpm_idle()")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index 8fbd376471de..24a3013728c3 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -446,7 +446,10 @@ static int rpm_idle(struct device *dev, int rpmflags)
 	/* Pending requests need to be canceled. */
 	dev->power.request = RPM_REQ_NONE;
 
-	if (dev->power.no_callbacks)
+	callback = RPM_GET_CALLBACK(dev, runtime_idle);
+
+	/* If no callback assume success. */
+	if (!callback || dev->power.no_callbacks)
 		goto out;
 
 	/* Carry out an asynchronous or a synchronous idle notification. */
@@ -462,10 +465,7 @@ static int rpm_idle(struct device *dev, int rpmflags)
 
 	dev->power.idle_notification = true;
 
-	callback = RPM_GET_CALLBACK(dev, runtime_idle);
-
-	if (callback)
-		retval = __rpm_callback(callback, dev);
+	retval = __rpm_callback(callback, dev);
 
 	dev->power.idle_notification = false;
 	wake_up_all(&dev->power.wait_queue);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux