We have an arch specific callback here already. Signed-off-by: Thomas Gleixner --- arch/x86/kernel/process.c | 12 ++++++++++++ kernel/sched/idle.c | 15 --------------- 2 files changed, 12 insertions(+), 15 deletions(-) Index: b/arch/x86/kernel/process.c =================================================================== --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -271,6 +271,18 @@ void exit_idle(void) } #endif +void arch_cpu_idle_prepare(void) +{ + /* + * If we're the non-boot CPU, nothing set the stack canary up + * for us. The boot CPU already has it initialized but no harm + * in doing it again. This is a good place for updating it, as + * we wont ever return from this function (so the invalid + * canaries already on the stack wont ever trigger). + */ + boot_init_stack_canary(); +} + void arch_cpu_idle_enter(void) { local_touch_nmi(); Index: b/kernel/sched/idle.c =================================================================== --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -275,21 +275,6 @@ static void cpu_idle_loop(void) void cpu_startup_entry(enum cpuhp_state state) { - /* - * This #ifdef needs to die, but it's too late in the cycle to - * make this generic (arm and sh have never invoked the canary - * init for the non boot cpus!). Will be fixed in 3.11 - */ -#ifdef CONFIG_X86 - /* - * If we're the non-boot CPU, nothing set the stack canary up - * for us. The boot CPU already has it initialized but no harm - * in doing it again. This is a good place for updating it, as - * we wont ever return from this function (so the invalid - * canaries already on the stack wont ever trigger). - */ - boot_init_stack_canary(); -#endif arch_cpu_idle_prepare(); cpu_idle_loop(); }