diff options
author | German Monroy <german.monroy@intel.com> | 2012-05-14 17:14:19 -0700 |
---|---|---|
committer | buildbot <buildbot@intel.com> | 2012-05-16 02:33:37 -0700 |
commit | c9ad3cd9de9f284387e61f68279cdb25e617d233 (patch) | |
tree | 76acdbfaf2aed25435840e1ae957362568712664 /arch | |
parent | f777aa3f4c21ca96aa06a1a1b1eac0c900013c32 (diff) | |
download | kernel-mfld-blackbay-c9ad3cd9de9f284387e61f68279cdb25e617d233.tar.gz kernel-mfld-blackbay-c9ad3cd9de9f284387e61f68279cdb25e617d233.tar.bz2 kernel-mfld-blackbay-c9ad3cd9de9f284387e61f68279cdb25e617d233.zip |
x86: Call idle notifiers
BZ: 35303
Google patched the idle loop for x86-64 (commit 1fd57f722c) and for ARM
(commit 41fa406c26), but they forgot x86-32.
This is preventing their interactive governor from upshifting CPU
frequencies in intel's SOC platforms (e.g. Medfield, etc.).
Fixing that.
NOTE: The notifier calls are not located in the same exact place in the
idle loop for x86-64 and ARM. The notifier is called inside the
`while(!need_resched)' loop in x86-64 and outside of it in ARM. Since
Google has likely tuned this governor for ARM, leaving it as in ARM.
Change-Id: Ibefd0c8f08e4b4c24c4a5c32dcdc574f9090b2b9
Signed-off-by: German Monroy <german.monroy@intel.com>
Reviewed-on: http://android.intel.com:8080/48858
Reviewed-by: Gross, Mark <mark.gross@intel.com>
Reviewed-by: Yang, Fei <fei.yang@intel.com>
Reviewed-by: Kuppuswamy, Sathyanarayanan <sathyanarayanan.kuppuswamy@intel.com>
Tested-by: Ng, Cheon-woei <cheon-woei.ng@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/process_32.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index a3d0dc59067..e6e043d3504 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -98,6 +98,7 @@ void cpu_idle(void) /* endless idle loop with no priority at all */ while (1) { tick_nohz_stop_sched_tick(1); + idle_notifier_call_chain(IDLE_START); while (!need_resched()) { check_pgt_cache(); @@ -112,6 +113,7 @@ void cpu_idle(void) pm_idle(); start_critical_timings(); } + idle_notifier_call_chain(IDLE_END); tick_nohz_restart_sched_tick(); preempt_enable_no_resched(); schedule(); |