diff options
-rw-r--r-- | drivers/cpuidle/governors/menu.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c index 110483f0e3fb..e26a40971b26 100644 --- a/drivers/cpuidle/governors/menu.c +++ b/drivers/cpuidle/governors/menu.c | |||
@@ -379,9 +379,20 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev, | |||
379 | if (idx == -1) | 379 | if (idx == -1) |
380 | idx = i; /* first enabled state */ | 380 | idx = i; /* first enabled state */ |
381 | if (s->target_residency > data->predicted_us) { | 381 | if (s->target_residency > data->predicted_us) { |
382 | if (!tick_nohz_tick_stopped()) | 382 | if (data->predicted_us < TICK_USEC) |
383 | break; | 383 | break; |
384 | 384 | ||
385 | if (!tick_nohz_tick_stopped()) { | ||
386 | /* | ||
387 | * If the state selected so far is shallow, | ||
388 | * waking up early won't hurt, so retain the | ||
389 | * tick in that case and let the governor run | ||
390 | * again in the next iteration of the loop. | ||
391 | */ | ||
392 | expected_interval = drv->states[idx].target_residency; | ||
393 | break; | ||
394 | } | ||
395 | |||
385 | /* | 396 | /* |
386 | * If the state selected so far is shallow and this | 397 | * If the state selected so far is shallow and this |
387 | * state's target residency matches the time till the | 398 | * state's target residency matches the time till the |