Message ID | 1446590059-18897-3-git-send-email-riel@redhat.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Rafael Wysocki |
Headers | show |
On 11/3/2015 2:34 PM, riel@redhat.com wrote: > From: Rik van Riel <riel@redhat.com> > > The menu governor carefully figures out how much time we typically > sleep for an estimated sleep interval, or whether there is a repeating > pattern going on, and corrects that estimate for the CPU load. > > Then it proceeds to ignore that information when determining whether > or not to consider polling. This is not a big deal on most x86 CPUs, > which have very low C1 latencies, and the patch should not have any > effect on those CPUs. > > However, certain CPUs (eg. Atom) have much higher C1 latencies, and > it would be good to not waste performance and power on those CPUs if > we are expecting a very low wakeup latency. > > Disable polling based on the estimated interactivity requirement, not > on the time to the next timer interrupt. > good catch! Acked-by: Arjan van de Ven <arjan@linux.intel.com> -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c index ecc242a586c9..b1a55731f921 100644 --- a/drivers/cpuidle/governors/menu.c +++ b/drivers/cpuidle/governors/menu.c @@ -330,7 +330,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) * We want to default to C1 (hlt), not to busy polling * unless the timer is happening really really soon. */ - if (data->next_timer_us > 20 && + if (interactivity_req > 20 && !drv->states[CPUIDLE_DRIVER_STATE_START].disabled && dev->states_usage[CPUIDLE_DRIVER_STATE_START].disable == 0) data->last_state_idx = CPUIDLE_DRIVER_STATE_START;