PM-runtime: update accounting_timestamp on enable
authorVincent Guittot <vincent.guittot@linaro.org>
Wed, 23 Jan 2019 07:50:13 +0000 (08:50 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 31 Jan 2019 09:44:44 +0000 (10:44 +0100)
Initializing accounting_timestamp to something different from 0 during
pm_runtime_init() doesn't make sense and puts an artificial ordering
constraint between timekeeping_init() and pm_runtime_init().

PM-runtime should start time accounting only when it is enabled and
discard the period when disabled.

Set accounting_timestamp to now when enabling PM-runtime.

Suggested-by: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
[ rjw: Subject & changelog ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/power/runtime.c

index a453090c9449bb281a800a35720febd89edc6c3e..f23b7ecfce3b38d9f4dec6b58361c671ef7992dc 100644 (file)
@@ -1309,10 +1309,15 @@ void pm_runtime_enable(struct device *dev)
 
        spin_lock_irqsave(&dev->power.lock, flags);
 
-       if (dev->power.disable_depth > 0)
+       if (dev->power.disable_depth > 0) {
                dev->power.disable_depth--;
-       else
+
+               /* About to enable runtime pm, set accounting_timestamp to now */
+               if (!dev->power.disable_depth)
+                       dev->power.accounting_timestamp = jiffies;
+       } else {
                dev_warn(dev, "Unbalanced %s!\n", __func__);
+       }
 
        WARN(!dev->power.disable_depth &&
             dev->power.runtime_status == RPM_SUSPENDED &&
@@ -1509,7 +1514,7 @@ void pm_runtime_init(struct device *dev)
        dev->power.request_pending = false;
        dev->power.request = RPM_REQ_NONE;
        dev->power.deferred_resume = false;
-       dev->power.accounting_timestamp = jiffies;
+       dev->power.accounting_timestamp = 0;
        INIT_WORK(&dev->power.work, pm_runtime_work);
 
        dev->power.timer_expires = 0;