cpuidle: menu: Refine idle state selection for running tick
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 5 Apr 2018 17:12:34 +0000 (19:12 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 9 Apr 2018 09:54:56 +0000 (11:54 +0200)
commit296bb1e51a4838a6488ec5ce676607093482ecbc
tree15bb67b6593378aa3cc3b60e8bf754278f7c53aa
parent554c8aa8ecade210d58a252173bb8f2106552a44
cpuidle: menu: Refine idle state selection for running tick

If the tick isn't stopped, the target residency of the state selected
by the menu governor may be greater than the actual time to the next
tick and that means lost energy.

To avoid that, make tick_nohz_get_sleep_length() return the current
time to the next event (before stopping the tick) in addition to the
estimated one via an extra pointer argument and make menu_select()
use that value to refine the state selection when necessary.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
drivers/cpuidle/governors/menu.c
include/linux/tick.h
kernel/time/tick-sched.c