diff options
-rw-r--r-- | drivers/cpuidle/governors/menu.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c index b347c101c1f7..71b523293354 100644 --- a/drivers/cpuidle/governors/menu.c +++ b/drivers/cpuidle/governors/menu.c | |||
@@ -288,7 +288,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | |||
288 | struct menu_device *data = &__get_cpu_var(menu_devices); | 288 | struct menu_device *data = &__get_cpu_var(menu_devices); |
289 | int latency_req = pm_qos_request(PM_QOS_CPU_DMA_LATENCY); | 289 | int latency_req = pm_qos_request(PM_QOS_CPU_DMA_LATENCY); |
290 | int i; | 290 | int i; |
291 | int multiplier; | 291 | unsigned int interactivity_req; |
292 | struct timespec t; | 292 | struct timespec t; |
293 | 293 | ||
294 | if (data->needs_update) { | 294 | if (data->needs_update) { |
@@ -310,8 +310,6 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | |||
310 | 310 | ||
311 | data->bucket = which_bucket(data->next_timer_us); | 311 | data->bucket = which_bucket(data->next_timer_us); |
312 | 312 | ||
313 | multiplier = performance_multiplier(); | ||
314 | |||
315 | /* | 313 | /* |
316 | * if the correction factor is 0 (eg first time init or cpu hotplug | 314 | * if the correction factor is 0 (eg first time init or cpu hotplug |
317 | * etc), we actually want to start out with a unity factor. | 315 | * etc), we actually want to start out with a unity factor. |
@@ -331,6 +329,15 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | |||
331 | get_typical_interval(data); | 329 | get_typical_interval(data); |
332 | 330 | ||
333 | /* | 331 | /* |
332 | * Performance multiplier defines a minimum predicted idle | ||
333 | * duration / latency ratio. Adjust the latency limit if | ||
334 | * necessary. | ||
335 | */ | ||
336 | interactivity_req = data->predicted_us / performance_multiplier(); | ||
337 | if (latency_req > interactivity_req) | ||
338 | latency_req = interactivity_req; | ||
339 | |||
340 | /* | ||
334 | * We want to default to C1 (hlt), not to busy polling | 341 | * We want to default to C1 (hlt), not to busy polling |
335 | * unless the timer is happening really really soon. | 342 | * unless the timer is happening really really soon. |
336 | */ | 343 | */ |
@@ -353,8 +360,6 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | |||
353 | continue; | 360 | continue; |
354 | if (s->exit_latency > latency_req) | 361 | if (s->exit_latency > latency_req) |
355 | continue; | 362 | continue; |
356 | if (s->exit_latency * multiplier > data->predicted_us) | ||
357 | continue; | ||
358 | 363 | ||
359 | data->last_state_idx = i; | 364 | data->last_state_idx = i; |
360 | } | 365 | } |