The next patch will introduce the ability to unregister a governor which will share part of the register function code. Instead of duplicating, let's encapuslate the common parts into functions, so they can be called from different places.
Signed-off-by: Daniel Lezcano <[email protected]> --- drivers/cpuidle/governor.c | 39 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c index 29acaf48e575..d46ab8ec2dd7 100644 --- a/drivers/cpuidle/governor.c +++ b/drivers/cpuidle/governor.c @@ -39,6 +39,27 @@ struct cpuidle_governor *cpuidle_find_governor(const char *str) return NULL; } +static void cpuidle_switch_off(void) +{ + struct cpuidle_device *dev; + + cpuidle_uninstall_idle_handler(); + + if (cpuidle_curr_governor) { + list_for_each_entry(dev, &cpuidle_detected_devices, device_list) + cpuidle_disable_device(dev); + } +} + +static void cpuidle_switch_on(void) +{ + struct cpuidle_device *dev; + + list_for_each_entry(dev, &cpuidle_detected_devices, device_list) + cpuidle_enable_device(dev); + cpuidle_install_idle_handler(); +} + /** * cpuidle_switch_governor - changes the governor * @gov: the new target governor @@ -46,29 +67,19 @@ struct cpuidle_governor *cpuidle_find_governor(const char *str) */ int cpuidle_switch_governor(struct cpuidle_governor *gov) { - struct cpuidle_device *dev; - if (!gov) return -EINVAL; if (gov == cpuidle_curr_governor) return 0; - cpuidle_uninstall_idle_handler(); - - if (cpuidle_curr_governor) { - list_for_each_entry(dev, &cpuidle_detected_devices, device_list) - cpuidle_disable_device(dev); - } + cpuidle_switch_off(); cpuidle_curr_governor = gov; - if (gov) { - list_for_each_entry(dev, &cpuidle_detected_devices, device_list) - cpuidle_enable_device(dev); - cpuidle_install_idle_handler(); - printk(KERN_INFO "cpuidle: using governor %s\n", gov->name); - } + cpuidle_switch_on(); + + printk(KERN_INFO "cpuidle: using governor %s\n", gov->name); return 0; } -- 2.17.1

