From: Olaf Dabrunz <od@suse.de> Subject: [apm] default to "power_off" when SMP kernel is used on single processo r machines Reference: SUSE221667 This patch turns on support for the APM power_off function by default when the SMP kernel is used on single processor machines. It is a bit ugly to use a separate variable to make sure the default value is only used when needed and the power_off variable is not initialized twice. But I did not find a better way to do this with the way the current initialization system works. Signed-off-by: Olaf Dabrunz <od@suse.de> arch/x86/kernel/apm_32.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c @@ -388,6 +388,7 @@ static bool smp __read_mostly; static int apm_disabled = -1; #ifdef CONFIG_SMP static bool power_off; +static int power_off_set; #else static bool power_off = 1; #endif @@ -1843,6 +1844,14 @@ static int apm(void *unused) } } +#ifdef CONFIG_SMP + if (!power_off_set) { + power_off = (num_online_cpus() == 1); + /* remember not to initialize (with default value) again */ + power_off_set = 1; + } +#endif + /* Install our power off handler.. */ if (power_off) pm_power_off = apm_power_off; @@ -1886,8 +1895,12 @@ static int __init apm_setup(char *str) if (strncmp(str, "debug", 5) == 0) debug = !invert; if ((strncmp(str, "power-off", 9) == 0) || - (strncmp(str, "power_off", 9) == 0)) + (strncmp(str, "power_off", 9) == 0)) { power_off = !invert; +#ifdef CONFIG_SMP + power_off_set = 1; +#endif + } if (strncmp(str, "smp", 3) == 0) { smp = !invert; idle_threshold = 100;