cpuidle: menu: Fix wakeup statistics updates for polling state
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 2 Oct 2018 21:42:02 +0000 (23:42 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 4 Oct 2018 08:23:37 +0000 (10:23 +0200)
commit5f26bdceb9c0a5e6c696aa2899d077cd3ae93413
treef73ab5c1133dacafade0cadf06686bd3a8d11a09
parent03dba278043358bbbf4f029be169e1e73d2fbe2b
cpuidle: menu: Fix wakeup statistics updates for polling state

If the CPU exits the "polling" state due to the time limit in the
loop in poll_idle(), this is not a real wakeup and it just means
that the "polling" state selection was not adequate.  The governor
mispredicted short idle duration, but had a more suitable state been
selected, the CPU might have spent more time in it.  In fact, there
is no reason to expect that there would have been a wakeup event
earlier than the next timer in that case.

Handling such cases as regular wakeups in menu_update() may cause the
menu governor to make suboptimal decisions going forward, but ignoring
them altogether would not be correct either, because every time
menu_select() is invoked, it makes a separate new attempt to predict
the idle duration taking distinct time to the closest timer event as
input and the outcomes of all those attempts should be recorded.

For this reason, make menu_update() always assume that if the
"polling" state was exited due to the time limit, the next proper
wakeup event for the CPU would be the next timer event (not
including the tick).

Fixes: a37b969a61c1 "cpuidle: poll_state: Add time limit to poll_idle()"
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/cpuidle/governors/menu.c
drivers/cpuidle/poll_state.c
include/linux/cpuidle.h