Commit f800ea32 authored by Ladislav Michl's avatar Ladislav Michl Committed by Rafael J. Wysocki
Browse files

PM-runtime: Optimize pm_runtime_autosuspend_expiration()



pm_runtime_autosuspend_expiration calls ktime_get_mono_fast_ns()
even when its returned value may be unused. Therefore get the
current time later and remove gotos while there.

Signed-off-by: default avatarLadislav Michl <ladis@linux-mips.org>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Acked-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 1cc9c595
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -145,24 +145,21 @@ static void pm_runtime_cancel_pending(struct device *dev)
u64 pm_runtime_autosuspend_expiration(struct device *dev)
{
	int autosuspend_delay;
	u64 last_busy, expires = 0;
	u64 now = ktime_get_mono_fast_ns();
	u64 expires;

	if (!dev->power.use_autosuspend)
		goto out;
		return 0;

	autosuspend_delay = READ_ONCE(dev->power.autosuspend_delay);
	if (autosuspend_delay < 0)
		goto out;

	last_busy = READ_ONCE(dev->power.last_busy);
		return 0;

	expires = last_busy + (u64)autosuspend_delay * NSEC_PER_MSEC;
	if (expires <= now)
		expires = 0;	/* Already expired. */
	expires  = READ_ONCE(dev->power.last_busy);
	expires += (u64)autosuspend_delay * NSEC_PER_MSEC;
	if (expires > ktime_get_mono_fast_ns())
		return expires;	/* Expires in the future */

 out:
	return expires;
	return 0;
}
EXPORT_SYMBOL_GPL(pm_runtime_autosuspend_expiration);