--- drivers/cpuidle/governors/menu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/drivers/cpuidle/governors/menu.c +++ b/drivers/cpuidle/governors/menu.c @@ -116,6 +116,7 @@ static void menu_update(struct cpuidle_d static unsigned int get_typical_interval(struct menu_device *data) { s64 value, min_thresh = -1, max_thresh = UINT_MAX; + unsigned int max_overall = 0; unsigned int max, min, divisor; u64 avg, variance, avg_sq; int i; @@ -151,6 +152,9 @@ again: if (!max) return UINT_MAX; + if (max_overall < max) + max_overall = max; + if (divisor == INTERVALS) { avg >>= INTERVAL_SHIFT; variance >>= INTERVAL_SHIFT; @@ -198,7 +202,7 @@ again: * maximum, so return the latter in that case. */ if (divisor >= INTERVALS / 2) - return max; + return max_overall; return UINT_MAX; }