Hello, As mentioned, the code excerpt was from kernel version 3.0. In recent kernel (version 3.16.0-rc4), the code for the two mentioned functions looks as below - /** * cpuidle_install_idle_handler - installs the cpuidle idle loop handler */ void cpuidle_install_idle_handler(void) { if (enabled_devices) { /* Make sure all changes finished before we switch to new idle */ smp_wmb(); initialized = 1; } } /** * cpuidle_uninstall_idle_handler - uninstalls the cpuidle idle loop handler */ void cpuidle_uninstall_idle_handler(void) { if (enabled_devices) { initialized = 0; kick_all_cpus_sync(); } } That is the source of confusion. There is no pm_idle handler installed (or uninstalled) anymore. -- Thanks, -Meraj On Tue, Jul 22, 2014 at 4:54 PM, Mulyadi Santosa <mulyadi.santosa@gmail.com> wrote:
On Fri, Jul 18, 2014 at 11:07 PM, Mohammad Merajul Islam Molla <meraj.enigma@gmail.com> wrote:
Hello,
In drivers/cpuidle/cpuidle.c, there are two functions cpuidle_install_idle_handler & cpuidle_uninstall_idle_handler. The names seem confusing to me as they don't install any handler, rather set 'initialized' variable to 1/0.
In v3.0 kernel, these functions used to look as below where they installed and uninstalled some handler function -
void cpuidle_install_idle_handler(void) 123 { 124 if (enabled_devices && (pm_idle != cpuidle_idle_call)) { 125 /* Make sure all changes finished before we switch to new idle */ 126 smp_wmb(); 127 pm_idle = cpuidle_idle_call; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pm_idle is the callback handler, and it is assigned to cpuidle_idle_call. I think this what it means by "install"
-- regards,
Mulyadi Santosa Freelance Linux trainer and consultant
blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com