Skip to content

Commit fc6d73d

Browse files
committed
arch/hotplug: Call into idle with a proper state
Let the non boot cpus call into idle with the corresponding hotplug state, so the hotplug core can handle the further bringup. That's a first step to convert the boot side of the hotplugged cpus to do all the synchronization with the other side through the state machine. For now it'll only start the hotplug thread and kick the full bringup of the cpu. Signed-off-by: Thomas Gleixner <[email protected]> Cc: [email protected] Cc: Rik van Riel <[email protected]> Cc: Rafael Wysocki <[email protected]> Cc: "Srivatsa S. Bhat" <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Arjan van de Ven <[email protected]> Cc: Sebastian Siewior <[email protected]> Cc: Rusty Russell <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Oleg Nesterov <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Paul McKenney <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Paul Turner <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Thomas Gleixner <[email protected]>
1 parent 1cf4f62 commit fc6d73d

File tree

22 files changed

+22
-21
lines changed

22 files changed

+22
-21
lines changed

arch/alpha/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ smp_callin(void)
168168
cpuid, current, current->active_mm));
169169

170170
preempt_disable();
171-
cpu_startup_entry(CPUHP_ONLINE);
171+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
172172
}
173173

174174
/* Wait until hwrpb->txrdy is clear for cpu. Return -1 on timeout. */

arch/arc/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ void start_kernel_secondary(void)
142142

143143
local_irq_enable();
144144
preempt_disable();
145-
cpu_startup_entry(CPUHP_ONLINE);
145+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
146146
}
147147

148148
/*

arch/arm/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ asmlinkage void secondary_start_kernel(void)
409409
/*
410410
* OK, it's off to the idle thread for us
411411
*/
412-
cpu_startup_entry(CPUHP_ONLINE);
412+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
413413
}
414414

415415
void __init smp_cpus_done(unsigned int max_cpus)

arch/arm64/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ asmlinkage void secondary_start_kernel(void)
195195
/*
196196
* OK, it's off to the idle thread for us
197197
*/
198-
cpu_startup_entry(CPUHP_ONLINE);
198+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
199199
}
200200

201201
#ifdef CONFIG_HOTPLUG_CPU

arch/blackfin/mach-common/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ void secondary_start_kernel(void)
333333

334334
/* We are done with local CPU inits, unblock the boot CPU. */
335335
set_cpu_online(cpu, true);
336-
cpu_startup_entry(CPUHP_ONLINE);
336+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
337337
}
338338

339339
void __init smp_prepare_boot_cpu(void)

arch/hexagon/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ void start_secondary(void)
180180

181181
local_irq_enable();
182182

183-
cpu_startup_entry(CPUHP_ONLINE);
183+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
184184
}
185185

186186

arch/ia64/kernel/smpboot.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ start_secondary (void *unused)
454454
preempt_disable();
455455
smp_callin();
456456

457-
cpu_startup_entry(CPUHP_ONLINE);
457+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
458458
return 0;
459459
}
460460

arch/m32r/kernel/smpboot.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ int __init start_secondary(void *unused)
432432
*/
433433
local_flush_tlb_all();
434434

435-
cpu_startup_entry(CPUHP_ONLINE);
435+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
436436
return 0;
437437
}
438438

arch/metag/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ asmlinkage void secondary_start_kernel(void)
396396
/*
397397
* OK, it's off to the idle thread for us
398398
*/
399-
cpu_startup_entry(CPUHP_ONLINE);
399+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
400400
}
401401

402402
void __init smp_cpus_done(unsigned int max_cpus)

arch/mips/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ asmlinkage void start_secondary(void)
191191
WARN_ON_ONCE(!irqs_disabled());
192192
mp_ops->smp_finish();
193193

194-
cpu_startup_entry(CPUHP_ONLINE);
194+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
195195
}
196196

197197
static void stop_this_cpu(void *dummy)

arch/mn10300/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ int __init start_secondary(void *unused)
675675
#ifdef CONFIG_GENERIC_CLOCKEVENTS
676676
init_clockevents();
677677
#endif
678-
cpu_startup_entry(CPUHP_ONLINE);
678+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
679679
return 0;
680680
}
681681

arch/parisc/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ void __init smp_callin(void)
305305

306306
local_irq_enable(); /* Interrupts have been off until now */
307307

308-
cpu_startup_entry(CPUHP_ONLINE);
308+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
309309

310310
/* NOTREACHED */
311311
panic("smp_callin() AAAAaaaaahhhh....\n");

arch/powerpc/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,7 @@ void start_secondary(void *unused)
727727

728728
local_irq_enable();
729729

730-
cpu_startup_entry(CPUHP_ONLINE);
730+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
731731

732732
BUG();
733733
}

arch/s390/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ static void smp_start_secondary(void *cpuvoid)
798798
set_cpu_online(smp_processor_id(), true);
799799
inc_irq_stat(CPU_RST);
800800
local_irq_enable();
801-
cpu_startup_entry(CPUHP_ONLINE);
801+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
802802
}
803803

804804
/* Upping and downing of CPUs */

arch/sh/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ asmlinkage void start_secondary(void)
203203
set_cpu_online(cpu, true);
204204
per_cpu(cpu_state, cpu) = CPU_ONLINE;
205205

206-
cpu_startup_entry(CPUHP_ONLINE);
206+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
207207
}
208208

209209
extern struct {

arch/sparc/kernel/smp_32.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ static void sparc_start_secondary(void *arg)
364364
local_irq_enable();
365365

366366
wmb();
367-
cpu_startup_entry(CPUHP_ONLINE);
367+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
368368

369369
/* We should never reach here! */
370370
BUG();

arch/sparc/kernel/smp_64.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ void smp_callin(void)
134134

135135
local_irq_enable();
136136

137-
cpu_startup_entry(CPUHP_ONLINE);
137+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
138138
}
139139

140140
void cpu_panic(void)

arch/tile/kernel/smpboot.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ void online_secondary(void)
208208
/* Set up tile-timer clock-event device on this cpu */
209209
setup_tile_timer();
210210

211-
cpu_startup_entry(CPUHP_ONLINE);
211+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
212212
}
213213

214214
int __cpu_up(unsigned int cpu, struct task_struct *tidle)

arch/x86/kernel/smpboot.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ static void notrace start_secondary(void *unused)
248248
x86_cpuinit.setup_percpu_clockev();
249249

250250
wmb();
251-
cpu_startup_entry(CPUHP_ONLINE);
251+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
252252
}
253253

254254
void __init smp_store_boot_cpu_info(void)

arch/x86/xen/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ asmlinkage __visible void cpu_bringup_and_idle(int cpu)
112112
xen_pvh_secondary_vcpu_init(cpu);
113113
#endif
114114
cpu_bringup();
115-
cpu_startup_entry(CPUHP_ONLINE);
115+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
116116
}
117117

118118
static void xen_smp_intr_free(unsigned int cpu)

arch/xtensa/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ void secondary_start_kernel(void)
157157

158158
complete(&cpu_running);
159159

160-
cpu_startup_entry(CPUHP_ONLINE);
160+
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
161161
}
162162

163163
static void mx_cpu_start(void *p)

include/linux/cpuhotplug.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ enum cpuhp_state {
1313
CPUHP_CPU_SET_ACTIVE,
1414
CPUHP_KICK_AP_THREAD,
1515
CPUHP_BP_ONLINE,
16+
CPUHP_AP_ONLINE_IDLE,
1617
CPUHP_AP_SMPBOOT_THREADS,
1718
CPUHP_AP_NOTIFY_ONLINE,
1819
CPUHP_AP_ONLINE_DYN,

0 commit comments

Comments
 (0)