• Daniel Lezcano's avatar
    cpuidle: Make it clear that governors cannot be modules · 137b944e
    Daniel Lezcano authored
    cpufreq governors are defined as modules in the code, but the Kconfig
    options do not allow them to be built as modules.  This is not really
    a problem, but the cpuidle init ordering is: the cpuidle init
    functions (framework and driver) and then the governors.  That leads
    to some weirdness in the cpuidle framework.
    
    Namely,  cpuidle_register_device() calls cpuidle_enable_device() which
    fails at the first attempt, because governors have not been registered
    yet.  When a governor is registered, the framework calls
    cpuidle_enable_device() again which runs __cpuidle_register_device()
    only then.  Of course, for that to work, the cpuidle_enable_device()
    return value has to be ignored by cpuidle_register_device().
    
    Instead of having this cyclic call graph and relying on a positive
    side effects of the hackish back and forth cpuidle_enable_device()
    calls it is better to fix the cpuidle init ordering.
    
    To that end, replace the module init code with postcore_initcall()
    so we have:
    
     * cpuidle framework : core_initcall
     * cpuidle governors : postcore_initcall
     * cpuidle drivers   : device_initcall
    
    and remove the corresponding module exit code as it is dead anyway
    (governors can't be built as modules).
    
    [rjw: Changelog]
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    137b944e
menu.c 16.1 KB