Line data Source code
1 : /* CPU control.
2 : * (C) 2001, 2002, 2003, 2004 Rusty Russell
3 : *
4 : * This code is licenced under the GPL.
5 : */
6 : #include <linux/sched/mm.h>
7 : #include <linux/proc_fs.h>
8 : #include <linux/smp.h>
9 : #include <linux/init.h>
10 : #include <linux/notifier.h>
11 : #include <linux/sched/signal.h>
12 : #include <linux/sched/hotplug.h>
13 : #include <linux/sched/isolation.h>
14 : #include <linux/sched/task.h>
15 : #include <linux/sched/smt.h>
16 : #include <linux/unistd.h>
17 : #include <linux/cpu.h>
18 : #include <linux/oom.h>
19 : #include <linux/rcupdate.h>
20 : #include <linux/export.h>
21 : #include <linux/bug.h>
22 : #include <linux/kthread.h>
23 : #include <linux/stop_machine.h>
24 : #include <linux/mutex.h>
25 : #include <linux/gfp.h>
26 : #include <linux/suspend.h>
27 : #include <linux/lockdep.h>
28 : #include <linux/tick.h>
29 : #include <linux/irq.h>
30 : #include <linux/nmi.h>
31 : #include <linux/smpboot.h>
32 : #include <linux/relay.h>
33 : #include <linux/slab.h>
34 : #include <linux/scs.h>
35 : #include <linux/percpu-rwsem.h>
36 : #include <linux/cpuset.h>
37 : #include <linux/random.h>
38 : #include <linux/cc_platform.h>
39 :
40 : #include <trace/events/power.h>
41 : #define CREATE_TRACE_POINTS
42 : #include <trace/events/cpuhp.h>
43 :
44 : #include "smpboot.h"
45 :
46 : /**
47 : * struct cpuhp_cpu_state - Per cpu hotplug state storage
48 : * @state: The current cpu state
49 : * @target: The target state
50 : * @fail: Current CPU hotplug callback state
51 : * @thread: Pointer to the hotplug thread
52 : * @should_run: Thread should execute
53 : * @rollback: Perform a rollback
54 : * @single: Single callback invocation
55 : * @bringup: Single callback bringup or teardown selector
56 : * @cpu: CPU number
57 : * @node: Remote CPU node; for multi-instance, do a
58 : * single entry callback for install/remove
59 : * @last: For multi-instance rollback, remember how far we got
60 : * @cb_state: The state for a single callback (install/uninstall)
61 : * @result: Result of the operation
62 : * @done_up: Signal completion to the issuer of the task for cpu-up
63 : * @done_down: Signal completion to the issuer of the task for cpu-down
64 : */
65 : struct cpuhp_cpu_state {
66 : enum cpuhp_state state;
67 : enum cpuhp_state target;
68 : enum cpuhp_state fail;
69 : #ifdef CONFIG_SMP
70 : struct task_struct *thread;
71 : bool should_run;
72 : bool rollback;
73 : bool single;
74 : bool bringup;
75 : struct hlist_node *node;
76 : struct hlist_node *last;
77 : enum cpuhp_state cb_state;
78 : int result;
79 : struct completion done_up;
80 : struct completion done_down;
81 : #endif
82 : };
83 :
84 : static DEFINE_PER_CPU(struct cpuhp_cpu_state, cpuhp_state) = {
85 : .fail = CPUHP_INVALID,
86 : };
87 :
88 : #ifdef CONFIG_SMP
89 : cpumask_t cpus_booted_once_mask;
90 : #endif
91 :
92 : #if defined(CONFIG_LOCKDEP) && defined(CONFIG_SMP)
93 : static struct lockdep_map cpuhp_state_up_map =
94 : STATIC_LOCKDEP_MAP_INIT("cpuhp_state-up", &cpuhp_state_up_map);
95 : static struct lockdep_map cpuhp_state_down_map =
96 : STATIC_LOCKDEP_MAP_INIT("cpuhp_state-down", &cpuhp_state_down_map);
97 :
98 :
99 : static inline void cpuhp_lock_acquire(bool bringup)
100 : {
101 : lock_map_acquire(bringup ? &cpuhp_state_up_map : &cpuhp_state_down_map);
102 : }
103 :
104 : static inline void cpuhp_lock_release(bool bringup)
105 : {
106 : lock_map_release(bringup ? &cpuhp_state_up_map : &cpuhp_state_down_map);
107 : }
108 : #else
109 :
110 : static inline void cpuhp_lock_acquire(bool bringup) { }
111 : static inline void cpuhp_lock_release(bool bringup) { }
112 :
113 : #endif
114 :
115 : /**
116 : * struct cpuhp_step - Hotplug state machine step
117 : * @name: Name of the step
118 : * @startup: Startup function of the step
119 : * @teardown: Teardown function of the step
120 : * @cant_stop: Bringup/teardown can't be stopped at this step
121 : * @multi_instance: State has multiple instances which get added afterwards
122 : */
123 : struct cpuhp_step {
124 : const char *name;
125 : union {
126 : int (*single)(unsigned int cpu);
127 : int (*multi)(unsigned int cpu,
128 : struct hlist_node *node);
129 : } startup;
130 : union {
131 : int (*single)(unsigned int cpu);
132 : int (*multi)(unsigned int cpu,
133 : struct hlist_node *node);
134 : } teardown;
135 : /* private: */
136 : struct hlist_head list;
137 : /* public: */
138 : bool cant_stop;
139 : bool multi_instance;
140 : };
141 :
142 : static DEFINE_MUTEX(cpuhp_state_mutex);
143 : static struct cpuhp_step cpuhp_hp_states[];
144 :
145 : static struct cpuhp_step *cpuhp_get_step(enum cpuhp_state state)
146 : {
147 27 : return cpuhp_hp_states + state;
148 : }
149 :
150 : static bool cpuhp_step_empty(bool bringup, struct cpuhp_step *step)
151 : {
152 6 : return bringup ? !step->startup.single : !step->teardown.single;
153 : }
154 :
155 : /**
156 : * cpuhp_invoke_callback - Invoke the callbacks for a given state
157 : * @cpu: The cpu for which the callback should be invoked
158 : * @state: The state to do callbacks for
159 : * @bringup: True if the bringup callback should be invoked
160 : * @node: For multi-instance, do a single entry callback for install/remove
161 : * @lastp: For multi-instance rollback, remember how far we got
162 : *
163 : * Called from cpu hotplug and from the state register machinery.
164 : *
165 : * Return: %0 on success or a negative errno code
166 : */
167 3 : static int cpuhp_invoke_callback(unsigned int cpu, enum cpuhp_state state,
168 : bool bringup, struct hlist_node *node,
169 : struct hlist_node **lastp)
170 : {
171 3 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
172 3 : struct cpuhp_step *step = cpuhp_get_step(state);
173 : int (*cbm)(unsigned int cpu, struct hlist_node *node);
174 : int (*cb)(unsigned int cpu);
175 : int ret, cnt;
176 :
177 3 : if (st->fail == state) {
178 0 : st->fail = CPUHP_INVALID;
179 0 : return -EAGAIN;
180 : }
181 :
182 3 : if (cpuhp_step_empty(bringup, step)) {
183 0 : WARN_ON_ONCE(1);
184 : return 0;
185 : }
186 :
187 3 : if (!step->multi_instance) {
188 3 : WARN_ON_ONCE(lastp && *lastp);
189 3 : cb = bringup ? step->startup.single : step->teardown.single;
190 :
191 3 : trace_cpuhp_enter(cpu, st->target, state, cb);
192 3 : ret = cb(cpu);
193 3 : trace_cpuhp_exit(cpu, st->state, state, ret);
194 3 : return ret;
195 : }
196 0 : cbm = bringup ? step->startup.multi : step->teardown.multi;
197 :
198 : /* Single invocation for instance add/remove */
199 0 : if (node) {
200 0 : WARN_ON_ONCE(lastp && *lastp);
201 0 : trace_cpuhp_multi_enter(cpu, st->target, state, cbm, node);
202 0 : ret = cbm(cpu, node);
203 0 : trace_cpuhp_exit(cpu, st->state, state, ret);
204 0 : return ret;
205 : }
206 :
207 : /* State transition. Invoke on all instances */
208 0 : cnt = 0;
209 0 : hlist_for_each(node, &step->list) {
210 0 : if (lastp && node == *lastp)
211 : break;
212 :
213 0 : trace_cpuhp_multi_enter(cpu, st->target, state, cbm, node);
214 0 : ret = cbm(cpu, node);
215 0 : trace_cpuhp_exit(cpu, st->state, state, ret);
216 0 : if (ret) {
217 0 : if (!lastp)
218 : goto err;
219 :
220 0 : *lastp = node;
221 0 : return ret;
222 : }
223 0 : cnt++;
224 : }
225 0 : if (lastp)
226 0 : *lastp = NULL;
227 : return 0;
228 : err:
229 : /* Rollback the instances if one failed */
230 0 : cbm = !bringup ? step->startup.multi : step->teardown.multi;
231 0 : if (!cbm)
232 : return ret;
233 :
234 0 : hlist_for_each(node, &step->list) {
235 0 : if (!cnt--)
236 : break;
237 :
238 0 : trace_cpuhp_multi_enter(cpu, st->target, state, cbm, node);
239 0 : ret = cbm(cpu, node);
240 0 : trace_cpuhp_exit(cpu, st->state, state, ret);
241 : /*
242 : * Rollback must not fail,
243 : */
244 0 : WARN_ON_ONCE(ret);
245 : }
246 : return ret;
247 : }
248 :
249 : #ifdef CONFIG_SMP
250 : static bool cpuhp_is_ap_state(enum cpuhp_state state)
251 : {
252 : /*
253 : * The extra check for CPUHP_TEARDOWN_CPU is only for documentation
254 : * purposes as that state is handled explicitly in cpu_down.
255 : */
256 : return state > CPUHP_BRINGUP_CPU && state != CPUHP_TEARDOWN_CPU;
257 : }
258 :
259 : static inline void wait_for_ap_thread(struct cpuhp_cpu_state *st, bool bringup)
260 : {
261 : struct completion *done = bringup ? &st->done_up : &st->done_down;
262 : wait_for_completion(done);
263 : }
264 :
265 : static inline void complete_ap_thread(struct cpuhp_cpu_state *st, bool bringup)
266 : {
267 : struct completion *done = bringup ? &st->done_up : &st->done_down;
268 : complete(done);
269 : }
270 :
271 : /*
272 : * The former STARTING/DYING states, ran with IRQs disabled and must not fail.
273 : */
274 : static bool cpuhp_is_atomic_state(enum cpuhp_state state)
275 : {
276 : return CPUHP_AP_IDLE_DEAD <= state && state < CPUHP_AP_ONLINE;
277 : }
278 :
279 : /* Serializes the updates to cpu_online_mask, cpu_present_mask */
280 : static DEFINE_MUTEX(cpu_add_remove_lock);
281 : bool cpuhp_tasks_frozen;
282 : EXPORT_SYMBOL_GPL(cpuhp_tasks_frozen);
283 :
284 : /*
285 : * The following two APIs (cpu_maps_update_begin/done) must be used when
286 : * attempting to serialize the updates to cpu_online_mask & cpu_present_mask.
287 : */
288 : void cpu_maps_update_begin(void)
289 : {
290 : mutex_lock(&cpu_add_remove_lock);
291 : }
292 :
293 : void cpu_maps_update_done(void)
294 : {
295 : mutex_unlock(&cpu_add_remove_lock);
296 : }
297 :
298 : /*
299 : * If set, cpu_up and cpu_down will return -EBUSY and do nothing.
300 : * Should always be manipulated under cpu_add_remove_lock
301 : */
302 : static int cpu_hotplug_disabled;
303 :
304 : #ifdef CONFIG_HOTPLUG_CPU
305 :
306 : DEFINE_STATIC_PERCPU_RWSEM(cpu_hotplug_lock);
307 :
308 : void cpus_read_lock(void)
309 : {
310 : percpu_down_read(&cpu_hotplug_lock);
311 : }
312 : EXPORT_SYMBOL_GPL(cpus_read_lock);
313 :
314 : int cpus_read_trylock(void)
315 : {
316 : return percpu_down_read_trylock(&cpu_hotplug_lock);
317 : }
318 : EXPORT_SYMBOL_GPL(cpus_read_trylock);
319 :
320 : void cpus_read_unlock(void)
321 : {
322 : percpu_up_read(&cpu_hotplug_lock);
323 : }
324 : EXPORT_SYMBOL_GPL(cpus_read_unlock);
325 :
326 : void cpus_write_lock(void)
327 : {
328 : percpu_down_write(&cpu_hotplug_lock);
329 : }
330 :
331 : void cpus_write_unlock(void)
332 : {
333 : percpu_up_write(&cpu_hotplug_lock);
334 : }
335 :
336 : void lockdep_assert_cpus_held(void)
337 : {
338 : /*
339 : * We can't have hotplug operations before userspace starts running,
340 : * and some init codepaths will knowingly not take the hotplug lock.
341 : * This is all valid, so mute lockdep until it makes sense to report
342 : * unheld locks.
343 : */
344 : if (system_state < SYSTEM_RUNNING)
345 : return;
346 :
347 : percpu_rwsem_assert_held(&cpu_hotplug_lock);
348 : }
349 :
350 : #ifdef CONFIG_LOCKDEP
351 : int lockdep_is_cpus_held(void)
352 : {
353 : return percpu_rwsem_is_held(&cpu_hotplug_lock);
354 : }
355 : #endif
356 :
357 : static void lockdep_acquire_cpus_lock(void)
358 : {
359 : rwsem_acquire(&cpu_hotplug_lock.dep_map, 0, 0, _THIS_IP_);
360 : }
361 :
362 : static void lockdep_release_cpus_lock(void)
363 : {
364 : rwsem_release(&cpu_hotplug_lock.dep_map, _THIS_IP_);
365 : }
366 :
367 : /*
368 : * Wait for currently running CPU hotplug operations to complete (if any) and
369 : * disable future CPU hotplug (from sysfs). The 'cpu_add_remove_lock' protects
370 : * the 'cpu_hotplug_disabled' flag. The same lock is also acquired by the
371 : * hotplug path before performing hotplug operations. So acquiring that lock
372 : * guarantees mutual exclusion from any currently running hotplug operations.
373 : */
374 : void cpu_hotplug_disable(void)
375 : {
376 : cpu_maps_update_begin();
377 : cpu_hotplug_disabled++;
378 : cpu_maps_update_done();
379 : }
380 : EXPORT_SYMBOL_GPL(cpu_hotplug_disable);
381 :
382 : static void __cpu_hotplug_enable(void)
383 : {
384 : if (WARN_ONCE(!cpu_hotplug_disabled, "Unbalanced cpu hotplug enable\n"))
385 : return;
386 : cpu_hotplug_disabled--;
387 : }
388 :
389 : void cpu_hotplug_enable(void)
390 : {
391 : cpu_maps_update_begin();
392 : __cpu_hotplug_enable();
393 : cpu_maps_update_done();
394 : }
395 : EXPORT_SYMBOL_GPL(cpu_hotplug_enable);
396 :
397 : #else
398 :
399 : static void lockdep_acquire_cpus_lock(void)
400 : {
401 : }
402 :
403 : static void lockdep_release_cpus_lock(void)
404 : {
405 : }
406 :
407 : #endif /* CONFIG_HOTPLUG_CPU */
408 :
409 : /*
410 : * Architectures that need SMT-specific errata handling during SMT hotplug
411 : * should override this.
412 : */
413 : void __weak arch_smt_update(void) { }
414 :
415 : #ifdef CONFIG_HOTPLUG_SMT
416 : enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
417 :
418 : void __init cpu_smt_disable(bool force)
419 : {
420 : if (!cpu_smt_possible())
421 : return;
422 :
423 : if (force) {
424 : pr_info("SMT: Force disabled\n");
425 : cpu_smt_control = CPU_SMT_FORCE_DISABLED;
426 : } else {
427 : pr_info("SMT: disabled\n");
428 : cpu_smt_control = CPU_SMT_DISABLED;
429 : }
430 : }
431 :
432 : /*
433 : * The decision whether SMT is supported can only be done after the full
434 : * CPU identification. Called from architecture code.
435 : */
436 : void __init cpu_smt_check_topology(void)
437 : {
438 : if (!topology_smt_supported())
439 : cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
440 : }
441 :
442 : static int __init smt_cmdline_disable(char *str)
443 : {
444 : cpu_smt_disable(str && !strcmp(str, "force"));
445 : return 0;
446 : }
447 : early_param("nosmt", smt_cmdline_disable);
448 :
449 : static inline bool cpu_smt_allowed(unsigned int cpu)
450 : {
451 : if (cpu_smt_control == CPU_SMT_ENABLED)
452 : return true;
453 :
454 : if (topology_is_primary_thread(cpu))
455 : return true;
456 :
457 : /*
458 : * On x86 it's required to boot all logical CPUs at least once so
459 : * that the init code can get a chance to set CR4.MCE on each
460 : * CPU. Otherwise, a broadcasted MCE observing CR4.MCE=0b on any
461 : * core will shutdown the machine.
462 : */
463 : return !cpumask_test_cpu(cpu, &cpus_booted_once_mask);
464 : }
465 :
466 : /* Returns true if SMT is not supported of forcefully (irreversibly) disabled */
467 : bool cpu_smt_possible(void)
468 : {
469 : return cpu_smt_control != CPU_SMT_FORCE_DISABLED &&
470 : cpu_smt_control != CPU_SMT_NOT_SUPPORTED;
471 : }
472 : EXPORT_SYMBOL_GPL(cpu_smt_possible);
473 : #else
474 : static inline bool cpu_smt_allowed(unsigned int cpu) { return true; }
475 : #endif
476 :
477 : static inline enum cpuhp_state
478 : cpuhp_set_state(int cpu, struct cpuhp_cpu_state *st, enum cpuhp_state target)
479 : {
480 : enum cpuhp_state prev_state = st->state;
481 : bool bringup = st->state < target;
482 :
483 : st->rollback = false;
484 : st->last = NULL;
485 :
486 : st->target = target;
487 : st->single = false;
488 : st->bringup = bringup;
489 : if (cpu_dying(cpu) != !bringup)
490 : set_cpu_dying(cpu, !bringup);
491 :
492 : return prev_state;
493 : }
494 :
495 : static inline void
496 : cpuhp_reset_state(int cpu, struct cpuhp_cpu_state *st,
497 : enum cpuhp_state prev_state)
498 : {
499 : bool bringup = !st->bringup;
500 :
501 : st->target = prev_state;
502 :
503 : /*
504 : * Already rolling back. No need invert the bringup value or to change
505 : * the current state.
506 : */
507 : if (st->rollback)
508 : return;
509 :
510 : st->rollback = true;
511 :
512 : /*
513 : * If we have st->last we need to undo partial multi_instance of this
514 : * state first. Otherwise start undo at the previous state.
515 : */
516 : if (!st->last) {
517 : if (st->bringup)
518 : st->state--;
519 : else
520 : st->state++;
521 : }
522 :
523 : st->bringup = bringup;
524 : if (cpu_dying(cpu) != !bringup)
525 : set_cpu_dying(cpu, !bringup);
526 : }
527 :
528 : /* Regular hotplug invocation of the AP hotplug thread */
529 : static void __cpuhp_kick_ap(struct cpuhp_cpu_state *st)
530 : {
531 : if (!st->single && st->state == st->target)
532 : return;
533 :
534 : st->result = 0;
535 : /*
536 : * Make sure the above stores are visible before should_run becomes
537 : * true. Paired with the mb() above in cpuhp_thread_fun()
538 : */
539 : smp_mb();
540 : st->should_run = true;
541 : wake_up_process(st->thread);
542 : wait_for_ap_thread(st, st->bringup);
543 : }
544 :
545 : static int cpuhp_kick_ap(int cpu, struct cpuhp_cpu_state *st,
546 : enum cpuhp_state target)
547 : {
548 : enum cpuhp_state prev_state;
549 : int ret;
550 :
551 : prev_state = cpuhp_set_state(cpu, st, target);
552 : __cpuhp_kick_ap(st);
553 : if ((ret = st->result)) {
554 : cpuhp_reset_state(cpu, st, prev_state);
555 : __cpuhp_kick_ap(st);
556 : }
557 :
558 : return ret;
559 : }
560 :
561 : static int bringup_wait_for_ap(unsigned int cpu)
562 : {
563 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
564 :
565 : /* Wait for the CPU to reach CPUHP_AP_ONLINE_IDLE */
566 : wait_for_ap_thread(st, true);
567 : if (WARN_ON_ONCE((!cpu_online(cpu))))
568 : return -ECANCELED;
569 :
570 : /* Unpark the hotplug thread of the target cpu */
571 : kthread_unpark(st->thread);
572 :
573 : /*
574 : * SMT soft disabling on X86 requires to bring the CPU out of the
575 : * BIOS 'wait for SIPI' state in order to set the CR4.MCE bit. The
576 : * CPU marked itself as booted_once in notify_cpu_starting() so the
577 : * cpu_smt_allowed() check will now return false if this is not the
578 : * primary sibling.
579 : */
580 : if (!cpu_smt_allowed(cpu))
581 : return -ECANCELED;
582 :
583 : if (st->target <= CPUHP_AP_ONLINE_IDLE)
584 : return 0;
585 :
586 : return cpuhp_kick_ap(cpu, st, st->target);
587 : }
588 :
589 : static int bringup_cpu(unsigned int cpu)
590 : {
591 : struct task_struct *idle = idle_thread_get(cpu);
592 : int ret;
593 :
594 : /*
595 : * Reset stale stack state from the last time this CPU was online.
596 : */
597 : scs_task_reset(idle);
598 : kasan_unpoison_task_stack(idle);
599 :
600 : /*
601 : * Some architectures have to walk the irq descriptors to
602 : * setup the vector space for the cpu which comes online.
603 : * Prevent irq alloc/free across the bringup.
604 : */
605 : irq_lock_sparse();
606 :
607 : /* Arch-specific enabling code. */
608 : ret = __cpu_up(cpu, idle);
609 : irq_unlock_sparse();
610 : if (ret)
611 : return ret;
612 : return bringup_wait_for_ap(cpu);
613 : }
614 :
615 : static int finish_cpu(unsigned int cpu)
616 : {
617 : struct task_struct *idle = idle_thread_get(cpu);
618 : struct mm_struct *mm = idle->active_mm;
619 :
620 : /*
621 : * idle_task_exit() will have switched to &init_mm, now
622 : * clean up any remaining active_mm state.
623 : */
624 : if (mm != &init_mm)
625 : idle->active_mm = &init_mm;
626 : mmdrop(mm);
627 : return 0;
628 : }
629 :
630 : /*
631 : * Hotplug state machine related functions
632 : */
633 :
634 : /*
635 : * Get the next state to run. Empty ones will be skipped. Returns true if a
636 : * state must be run.
637 : *
638 : * st->state will be modified ahead of time, to match state_to_run, as if it
639 : * has already ran.
640 : */
641 : static bool cpuhp_next_state(bool bringup,
642 : enum cpuhp_state *state_to_run,
643 : struct cpuhp_cpu_state *st,
644 : enum cpuhp_state target)
645 : {
646 : do {
647 : if (bringup) {
648 : if (st->state >= target)
649 : return false;
650 :
651 : *state_to_run = ++st->state;
652 : } else {
653 : if (st->state <= target)
654 : return false;
655 :
656 : *state_to_run = st->state--;
657 : }
658 :
659 : if (!cpuhp_step_empty(bringup, cpuhp_get_step(*state_to_run)))
660 : break;
661 : } while (true);
662 :
663 : return true;
664 : }
665 :
666 : static int __cpuhp_invoke_callback_range(bool bringup,
667 : unsigned int cpu,
668 : struct cpuhp_cpu_state *st,
669 : enum cpuhp_state target,
670 : bool nofail)
671 : {
672 : enum cpuhp_state state;
673 : int ret = 0;
674 :
675 : while (cpuhp_next_state(bringup, &state, st, target)) {
676 : int err;
677 :
678 : err = cpuhp_invoke_callback(cpu, state, bringup, NULL, NULL);
679 : if (!err)
680 : continue;
681 :
682 : if (nofail) {
683 : pr_warn("CPU %u %s state %s (%d) failed (%d)\n",
684 : cpu, bringup ? "UP" : "DOWN",
685 : cpuhp_get_step(st->state)->name,
686 : st->state, err);
687 : ret = -1;
688 : } else {
689 : ret = err;
690 : break;
691 : }
692 : }
693 :
694 : return ret;
695 : }
696 :
697 : static inline int cpuhp_invoke_callback_range(bool bringup,
698 : unsigned int cpu,
699 : struct cpuhp_cpu_state *st,
700 : enum cpuhp_state target)
701 : {
702 : return __cpuhp_invoke_callback_range(bringup, cpu, st, target, false);
703 : }
704 :
705 : static inline void cpuhp_invoke_callback_range_nofail(bool bringup,
706 : unsigned int cpu,
707 : struct cpuhp_cpu_state *st,
708 : enum cpuhp_state target)
709 : {
710 : __cpuhp_invoke_callback_range(bringup, cpu, st, target, true);
711 : }
712 :
713 : static inline bool can_rollback_cpu(struct cpuhp_cpu_state *st)
714 : {
715 : if (IS_ENABLED(CONFIG_HOTPLUG_CPU))
716 : return true;
717 : /*
718 : * When CPU hotplug is disabled, then taking the CPU down is not
719 : * possible because takedown_cpu() and the architecture and
720 : * subsystem specific mechanisms are not available. So the CPU
721 : * which would be completely unplugged again needs to stay around
722 : * in the current state.
723 : */
724 : return st->state <= CPUHP_BRINGUP_CPU;
725 : }
726 :
727 : static int cpuhp_up_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st,
728 : enum cpuhp_state target)
729 : {
730 : enum cpuhp_state prev_state = st->state;
731 : int ret = 0;
732 :
733 : ret = cpuhp_invoke_callback_range(true, cpu, st, target);
734 : if (ret) {
735 : pr_debug("CPU UP failed (%d) CPU %u state %s (%d)\n",
736 : ret, cpu, cpuhp_get_step(st->state)->name,
737 : st->state);
738 :
739 : cpuhp_reset_state(cpu, st, prev_state);
740 : if (can_rollback_cpu(st))
741 : WARN_ON(cpuhp_invoke_callback_range(false, cpu, st,
742 : prev_state));
743 : }
744 : return ret;
745 : }
746 :
747 : /*
748 : * The cpu hotplug threads manage the bringup and teardown of the cpus
749 : */
750 : static int cpuhp_should_run(unsigned int cpu)
751 : {
752 : struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state);
753 :
754 : return st->should_run;
755 : }
756 :
757 : /*
758 : * Execute teardown/startup callbacks on the plugged cpu. Also used to invoke
759 : * callbacks when a state gets [un]installed at runtime.
760 : *
761 : * Each invocation of this function by the smpboot thread does a single AP
762 : * state callback.
763 : *
764 : * It has 3 modes of operation:
765 : * - single: runs st->cb_state
766 : * - up: runs ++st->state, while st->state < st->target
767 : * - down: runs st->state--, while st->state > st->target
768 : *
769 : * When complete or on error, should_run is cleared and the completion is fired.
770 : */
771 : static void cpuhp_thread_fun(unsigned int cpu)
772 : {
773 : struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state);
774 : bool bringup = st->bringup;
775 : enum cpuhp_state state;
776 :
777 : if (WARN_ON_ONCE(!st->should_run))
778 : return;
779 :
780 : /*
781 : * ACQUIRE for the cpuhp_should_run() load of ->should_run. Ensures
782 : * that if we see ->should_run we also see the rest of the state.
783 : */
784 : smp_mb();
785 :
786 : /*
787 : * The BP holds the hotplug lock, but we're now running on the AP,
788 : * ensure that anybody asserting the lock is held, will actually find
789 : * it so.
790 : */
791 : lockdep_acquire_cpus_lock();
792 : cpuhp_lock_acquire(bringup);
793 :
794 : if (st->single) {
795 : state = st->cb_state;
796 : st->should_run = false;
797 : } else {
798 : st->should_run = cpuhp_next_state(bringup, &state, st, st->target);
799 : if (!st->should_run)
800 : goto end;
801 : }
802 :
803 : WARN_ON_ONCE(!cpuhp_is_ap_state(state));
804 :
805 : if (cpuhp_is_atomic_state(state)) {
806 : local_irq_disable();
807 : st->result = cpuhp_invoke_callback(cpu, state, bringup, st->node, &st->last);
808 : local_irq_enable();
809 :
810 : /*
811 : * STARTING/DYING must not fail!
812 : */
813 : WARN_ON_ONCE(st->result);
814 : } else {
815 : st->result = cpuhp_invoke_callback(cpu, state, bringup, st->node, &st->last);
816 : }
817 :
818 : if (st->result) {
819 : /*
820 : * If we fail on a rollback, we're up a creek without no
821 : * paddle, no way forward, no way back. We loose, thanks for
822 : * playing.
823 : */
824 : WARN_ON_ONCE(st->rollback);
825 : st->should_run = false;
826 : }
827 :
828 : end:
829 : cpuhp_lock_release(bringup);
830 : lockdep_release_cpus_lock();
831 :
832 : if (!st->should_run)
833 : complete_ap_thread(st, bringup);
834 : }
835 :
836 : /* Invoke a single callback on a remote cpu */
837 : static int
838 : cpuhp_invoke_ap_callback(int cpu, enum cpuhp_state state, bool bringup,
839 : struct hlist_node *node)
840 : {
841 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
842 : int ret;
843 :
844 : if (!cpu_online(cpu))
845 : return 0;
846 :
847 : cpuhp_lock_acquire(false);
848 : cpuhp_lock_release(false);
849 :
850 : cpuhp_lock_acquire(true);
851 : cpuhp_lock_release(true);
852 :
853 : /*
854 : * If we are up and running, use the hotplug thread. For early calls
855 : * we invoke the thread function directly.
856 : */
857 : if (!st->thread)
858 : return cpuhp_invoke_callback(cpu, state, bringup, node, NULL);
859 :
860 : st->rollback = false;
861 : st->last = NULL;
862 :
863 : st->node = node;
864 : st->bringup = bringup;
865 : st->cb_state = state;
866 : st->single = true;
867 :
868 : __cpuhp_kick_ap(st);
869 :
870 : /*
871 : * If we failed and did a partial, do a rollback.
872 : */
873 : if ((ret = st->result) && st->last) {
874 : st->rollback = true;
875 : st->bringup = !bringup;
876 :
877 : __cpuhp_kick_ap(st);
878 : }
879 :
880 : /*
881 : * Clean up the leftovers so the next hotplug operation wont use stale
882 : * data.
883 : */
884 : st->node = st->last = NULL;
885 : return ret;
886 : }
887 :
888 : static int cpuhp_kick_ap_work(unsigned int cpu)
889 : {
890 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
891 : enum cpuhp_state prev_state = st->state;
892 : int ret;
893 :
894 : cpuhp_lock_acquire(false);
895 : cpuhp_lock_release(false);
896 :
897 : cpuhp_lock_acquire(true);
898 : cpuhp_lock_release(true);
899 :
900 : trace_cpuhp_enter(cpu, st->target, prev_state, cpuhp_kick_ap_work);
901 : ret = cpuhp_kick_ap(cpu, st, st->target);
902 : trace_cpuhp_exit(cpu, st->state, prev_state, ret);
903 :
904 : return ret;
905 : }
906 :
907 : static struct smp_hotplug_thread cpuhp_threads = {
908 : .store = &cpuhp_state.thread,
909 : .thread_should_run = cpuhp_should_run,
910 : .thread_fn = cpuhp_thread_fun,
911 : .thread_comm = "cpuhp/%u",
912 : .selfparking = true,
913 : };
914 :
915 : static __init void cpuhp_init_state(void)
916 : {
917 : struct cpuhp_cpu_state *st;
918 : int cpu;
919 :
920 : for_each_possible_cpu(cpu) {
921 : st = per_cpu_ptr(&cpuhp_state, cpu);
922 : init_completion(&st->done_up);
923 : init_completion(&st->done_down);
924 : }
925 : }
926 :
927 : void __init cpuhp_threads_init(void)
928 : {
929 : cpuhp_init_state();
930 : BUG_ON(smpboot_register_percpu_thread(&cpuhp_threads));
931 : kthread_unpark(this_cpu_read(cpuhp_state.thread));
932 : }
933 :
934 : /*
935 : *
936 : * Serialize hotplug trainwrecks outside of the cpu_hotplug_lock
937 : * protected region.
938 : *
939 : * The operation is still serialized against concurrent CPU hotplug via
940 : * cpu_add_remove_lock, i.e. CPU map protection. But it is _not_
941 : * serialized against other hotplug related activity like adding or
942 : * removing of state callbacks and state instances, which invoke either the
943 : * startup or the teardown callback of the affected state.
944 : *
945 : * This is required for subsystems which are unfixable vs. CPU hotplug and
946 : * evade lock inversion problems by scheduling work which has to be
947 : * completed _before_ cpu_up()/_cpu_down() returns.
948 : *
949 : * Don't even think about adding anything to this for any new code or even
950 : * drivers. It's only purpose is to keep existing lock order trainwrecks
951 : * working.
952 : *
953 : * For cpu_down() there might be valid reasons to finish cleanups which are
954 : * not required to be done under cpu_hotplug_lock, but that's a different
955 : * story and would be not invoked via this.
956 : */
957 : static void cpu_up_down_serialize_trainwrecks(bool tasks_frozen)
958 : {
959 : /*
960 : * cpusets delegate hotplug operations to a worker to "solve" the
961 : * lock order problems. Wait for the worker, but only if tasks are
962 : * _not_ frozen (suspend, hibernate) as that would wait forever.
963 : *
964 : * The wait is required because otherwise the hotplug operation
965 : * returns with inconsistent state, which could even be observed in
966 : * user space when a new CPU is brought up. The CPU plug uevent
967 : * would be delivered and user space reacting on it would fail to
968 : * move tasks to the newly plugged CPU up to the point where the
969 : * work has finished because up to that point the newly plugged CPU
970 : * is not assignable in cpusets/cgroups. On unplug that's not
971 : * necessarily a visible issue, but it is still inconsistent state,
972 : * which is the real problem which needs to be "fixed". This can't
973 : * prevent the transient state between scheduling the work and
974 : * returning from waiting for it.
975 : */
976 : if (!tasks_frozen)
977 : cpuset_wait_for_hotplug();
978 : }
979 :
980 : #ifdef CONFIG_HOTPLUG_CPU
981 : #ifndef arch_clear_mm_cpumask_cpu
982 : #define arch_clear_mm_cpumask_cpu(cpu, mm) cpumask_clear_cpu(cpu, mm_cpumask(mm))
983 : #endif
984 :
985 : /**
986 : * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU
987 : * @cpu: a CPU id
988 : *
989 : * This function walks all processes, finds a valid mm struct for each one and
990 : * then clears a corresponding bit in mm's cpumask. While this all sounds
991 : * trivial, there are various non-obvious corner cases, which this function
992 : * tries to solve in a safe manner.
993 : *
994 : * Also note that the function uses a somewhat relaxed locking scheme, so it may
995 : * be called only for an already offlined CPU.
996 : */
997 : void clear_tasks_mm_cpumask(int cpu)
998 : {
999 : struct task_struct *p;
1000 :
1001 : /*
1002 : * This function is called after the cpu is taken down and marked
1003 : * offline, so its not like new tasks will ever get this cpu set in
1004 : * their mm mask. -- Peter Zijlstra
1005 : * Thus, we may use rcu_read_lock() here, instead of grabbing
1006 : * full-fledged tasklist_lock.
1007 : */
1008 : WARN_ON(cpu_online(cpu));
1009 : rcu_read_lock();
1010 : for_each_process(p) {
1011 : struct task_struct *t;
1012 :
1013 : /*
1014 : * Main thread might exit, but other threads may still have
1015 : * a valid mm. Find one.
1016 : */
1017 : t = find_lock_task_mm(p);
1018 : if (!t)
1019 : continue;
1020 : arch_clear_mm_cpumask_cpu(cpu, t->mm);
1021 : task_unlock(t);
1022 : }
1023 : rcu_read_unlock();
1024 : }
1025 :
1026 : /* Take this CPU down. */
1027 : static int take_cpu_down(void *_param)
1028 : {
1029 : struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state);
1030 : enum cpuhp_state target = max((int)st->target, CPUHP_AP_OFFLINE);
1031 : int err, cpu = smp_processor_id();
1032 :
1033 : /* Ensure this CPU doesn't handle any more interrupts. */
1034 : err = __cpu_disable();
1035 : if (err < 0)
1036 : return err;
1037 :
1038 : /*
1039 : * Must be called from CPUHP_TEARDOWN_CPU, which means, as we are going
1040 : * down, that the current state is CPUHP_TEARDOWN_CPU - 1.
1041 : */
1042 : WARN_ON(st->state != (CPUHP_TEARDOWN_CPU - 1));
1043 :
1044 : /*
1045 : * Invoke the former CPU_DYING callbacks. DYING must not fail!
1046 : */
1047 : cpuhp_invoke_callback_range_nofail(false, cpu, st, target);
1048 :
1049 : /* Give up timekeeping duties */
1050 : tick_handover_do_timer();
1051 : /* Remove CPU from timer broadcasting */
1052 : tick_offline_cpu(cpu);
1053 : /* Park the stopper thread */
1054 : stop_machine_park(cpu);
1055 : return 0;
1056 : }
1057 :
1058 : static int takedown_cpu(unsigned int cpu)
1059 : {
1060 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
1061 : int err;
1062 :
1063 : /* Park the smpboot threads */
1064 : kthread_park(st->thread);
1065 :
1066 : /*
1067 : * Prevent irq alloc/free while the dying cpu reorganizes the
1068 : * interrupt affinities.
1069 : */
1070 : irq_lock_sparse();
1071 :
1072 : /*
1073 : * So now all preempt/rcu users must observe !cpu_active().
1074 : */
1075 : err = stop_machine_cpuslocked(take_cpu_down, NULL, cpumask_of(cpu));
1076 : if (err) {
1077 : /* CPU refused to die */
1078 : irq_unlock_sparse();
1079 : /* Unpark the hotplug thread so we can rollback there */
1080 : kthread_unpark(st->thread);
1081 : return err;
1082 : }
1083 : BUG_ON(cpu_online(cpu));
1084 :
1085 : /*
1086 : * The teardown callback for CPUHP_AP_SCHED_STARTING will have removed
1087 : * all runnable tasks from the CPU, there's only the idle task left now
1088 : * that the migration thread is done doing the stop_machine thing.
1089 : *
1090 : * Wait for the stop thread to go away.
1091 : */
1092 : wait_for_ap_thread(st, false);
1093 : BUG_ON(st->state != CPUHP_AP_IDLE_DEAD);
1094 :
1095 : /* Interrupts are moved away from the dying cpu, reenable alloc/free */
1096 : irq_unlock_sparse();
1097 :
1098 : hotplug_cpu__broadcast_tick_pull(cpu);
1099 : /* This actually kills the CPU. */
1100 : __cpu_die(cpu);
1101 :
1102 : tick_cleanup_dead_cpu(cpu);
1103 : rcutree_migrate_callbacks(cpu);
1104 : return 0;
1105 : }
1106 :
1107 : static void cpuhp_complete_idle_dead(void *arg)
1108 : {
1109 : struct cpuhp_cpu_state *st = arg;
1110 :
1111 : complete_ap_thread(st, false);
1112 : }
1113 :
1114 : void cpuhp_report_idle_dead(void)
1115 : {
1116 : struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state);
1117 :
1118 : BUG_ON(st->state != CPUHP_AP_OFFLINE);
1119 : rcu_report_dead(smp_processor_id());
1120 : st->state = CPUHP_AP_IDLE_DEAD;
1121 : /*
1122 : * We cannot call complete after rcu_report_dead() so we delegate it
1123 : * to an online cpu.
1124 : */
1125 : smp_call_function_single(cpumask_first(cpu_online_mask),
1126 : cpuhp_complete_idle_dead, st, 0);
1127 : }
1128 :
1129 : static int cpuhp_down_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st,
1130 : enum cpuhp_state target)
1131 : {
1132 : enum cpuhp_state prev_state = st->state;
1133 : int ret = 0;
1134 :
1135 : ret = cpuhp_invoke_callback_range(false, cpu, st, target);
1136 : if (ret) {
1137 : pr_debug("CPU DOWN failed (%d) CPU %u state %s (%d)\n",
1138 : ret, cpu, cpuhp_get_step(st->state)->name,
1139 : st->state);
1140 :
1141 : cpuhp_reset_state(cpu, st, prev_state);
1142 :
1143 : if (st->state < prev_state)
1144 : WARN_ON(cpuhp_invoke_callback_range(true, cpu, st,
1145 : prev_state));
1146 : }
1147 :
1148 : return ret;
1149 : }
1150 :
1151 : /* Requires cpu_add_remove_lock to be held */
1152 : static int __ref _cpu_down(unsigned int cpu, int tasks_frozen,
1153 : enum cpuhp_state target)
1154 : {
1155 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
1156 : int prev_state, ret = 0;
1157 :
1158 : if (num_online_cpus() == 1)
1159 : return -EBUSY;
1160 :
1161 : if (!cpu_present(cpu))
1162 : return -EINVAL;
1163 :
1164 : cpus_write_lock();
1165 :
1166 : cpuhp_tasks_frozen = tasks_frozen;
1167 :
1168 : prev_state = cpuhp_set_state(cpu, st, target);
1169 : /*
1170 : * If the current CPU state is in the range of the AP hotplug thread,
1171 : * then we need to kick the thread.
1172 : */
1173 : if (st->state > CPUHP_TEARDOWN_CPU) {
1174 : st->target = max((int)target, CPUHP_TEARDOWN_CPU);
1175 : ret = cpuhp_kick_ap_work(cpu);
1176 : /*
1177 : * The AP side has done the error rollback already. Just
1178 : * return the error code..
1179 : */
1180 : if (ret)
1181 : goto out;
1182 :
1183 : /*
1184 : * We might have stopped still in the range of the AP hotplug
1185 : * thread. Nothing to do anymore.
1186 : */
1187 : if (st->state > CPUHP_TEARDOWN_CPU)
1188 : goto out;
1189 :
1190 : st->target = target;
1191 : }
1192 : /*
1193 : * The AP brought itself down to CPUHP_TEARDOWN_CPU. So we need
1194 : * to do the further cleanups.
1195 : */
1196 : ret = cpuhp_down_callbacks(cpu, st, target);
1197 : if (ret && st->state < prev_state) {
1198 : if (st->state == CPUHP_TEARDOWN_CPU) {
1199 : cpuhp_reset_state(cpu, st, prev_state);
1200 : __cpuhp_kick_ap(st);
1201 : } else {
1202 : WARN(1, "DEAD callback error for CPU%d", cpu);
1203 : }
1204 : }
1205 :
1206 : out:
1207 : cpus_write_unlock();
1208 : /*
1209 : * Do post unplug cleanup. This is still protected against
1210 : * concurrent CPU hotplug via cpu_add_remove_lock.
1211 : */
1212 : lockup_detector_cleanup();
1213 : arch_smt_update();
1214 : cpu_up_down_serialize_trainwrecks(tasks_frozen);
1215 : return ret;
1216 : }
1217 :
1218 : static int cpu_down_maps_locked(unsigned int cpu, enum cpuhp_state target)
1219 : {
1220 : /*
1221 : * If the platform does not support hotplug, report it explicitly to
1222 : * differentiate it from a transient offlining failure.
1223 : */
1224 : if (cc_platform_has(CC_ATTR_HOTPLUG_DISABLED))
1225 : return -EOPNOTSUPP;
1226 : if (cpu_hotplug_disabled)
1227 : return -EBUSY;
1228 : return _cpu_down(cpu, 0, target);
1229 : }
1230 :
1231 : static int cpu_down(unsigned int cpu, enum cpuhp_state target)
1232 : {
1233 : int err;
1234 :
1235 : cpu_maps_update_begin();
1236 : err = cpu_down_maps_locked(cpu, target);
1237 : cpu_maps_update_done();
1238 : return err;
1239 : }
1240 :
1241 : /**
1242 : * cpu_device_down - Bring down a cpu device
1243 : * @dev: Pointer to the cpu device to offline
1244 : *
1245 : * This function is meant to be used by device core cpu subsystem only.
1246 : *
1247 : * Other subsystems should use remove_cpu() instead.
1248 : *
1249 : * Return: %0 on success or a negative errno code
1250 : */
1251 : int cpu_device_down(struct device *dev)
1252 : {
1253 : return cpu_down(dev->id, CPUHP_OFFLINE);
1254 : }
1255 :
1256 : int remove_cpu(unsigned int cpu)
1257 : {
1258 : int ret;
1259 :
1260 : lock_device_hotplug();
1261 : ret = device_offline(get_cpu_device(cpu));
1262 : unlock_device_hotplug();
1263 :
1264 : return ret;
1265 : }
1266 : EXPORT_SYMBOL_GPL(remove_cpu);
1267 :
1268 : void smp_shutdown_nonboot_cpus(unsigned int primary_cpu)
1269 : {
1270 : unsigned int cpu;
1271 : int error;
1272 :
1273 : cpu_maps_update_begin();
1274 :
1275 : /*
1276 : * Make certain the cpu I'm about to reboot on is online.
1277 : *
1278 : * This is inline to what migrate_to_reboot_cpu() already do.
1279 : */
1280 : if (!cpu_online(primary_cpu))
1281 : primary_cpu = cpumask_first(cpu_online_mask);
1282 :
1283 : for_each_online_cpu(cpu) {
1284 : if (cpu == primary_cpu)
1285 : continue;
1286 :
1287 : error = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
1288 : if (error) {
1289 : pr_err("Failed to offline CPU%d - error=%d",
1290 : cpu, error);
1291 : break;
1292 : }
1293 : }
1294 :
1295 : /*
1296 : * Ensure all but the reboot CPU are offline.
1297 : */
1298 : BUG_ON(num_online_cpus() > 1);
1299 :
1300 : /*
1301 : * Make sure the CPUs won't be enabled by someone else after this
1302 : * point. Kexec will reboot to a new kernel shortly resetting
1303 : * everything along the way.
1304 : */
1305 : cpu_hotplug_disabled++;
1306 :
1307 : cpu_maps_update_done();
1308 : }
1309 :
1310 : #else
1311 : #define takedown_cpu NULL
1312 : #endif /*CONFIG_HOTPLUG_CPU*/
1313 :
1314 : /**
1315 : * notify_cpu_starting(cpu) - Invoke the callbacks on the starting CPU
1316 : * @cpu: cpu that just started
1317 : *
1318 : * It must be called by the arch code on the new cpu, before the new cpu
1319 : * enables interrupts and before the "boot" cpu returns from __cpu_up().
1320 : */
1321 : void notify_cpu_starting(unsigned int cpu)
1322 : {
1323 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
1324 : enum cpuhp_state target = min((int)st->target, CPUHP_AP_ONLINE);
1325 :
1326 : rcu_cpu_starting(cpu); /* Enables RCU usage on this CPU. */
1327 : cpumask_set_cpu(cpu, &cpus_booted_once_mask);
1328 :
1329 : /*
1330 : * STARTING must not fail!
1331 : */
1332 : cpuhp_invoke_callback_range_nofail(true, cpu, st, target);
1333 : }
1334 :
1335 : /*
1336 : * Called from the idle task. Wake up the controlling task which brings the
1337 : * hotplug thread of the upcoming CPU up and then delegates the rest of the
1338 : * online bringup to the hotplug thread.
1339 : */
1340 : void cpuhp_online_idle(enum cpuhp_state state)
1341 : {
1342 : struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state);
1343 :
1344 : /* Happens for the boot cpu */
1345 : if (state != CPUHP_AP_ONLINE_IDLE)
1346 : return;
1347 :
1348 : /*
1349 : * Unpart the stopper thread before we start the idle loop (and start
1350 : * scheduling); this ensures the stopper task is always available.
1351 : */
1352 : stop_machine_unpark(smp_processor_id());
1353 :
1354 : st->state = CPUHP_AP_ONLINE_IDLE;
1355 : complete_ap_thread(st, true);
1356 : }
1357 :
1358 : /* Requires cpu_add_remove_lock to be held */
1359 : static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target)
1360 : {
1361 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
1362 : struct task_struct *idle;
1363 : int ret = 0;
1364 :
1365 : cpus_write_lock();
1366 :
1367 : if (!cpu_present(cpu)) {
1368 : ret = -EINVAL;
1369 : goto out;
1370 : }
1371 :
1372 : /*
1373 : * The caller of cpu_up() might have raced with another
1374 : * caller. Nothing to do.
1375 : */
1376 : if (st->state >= target)
1377 : goto out;
1378 :
1379 : if (st->state == CPUHP_OFFLINE) {
1380 : /* Let it fail before we try to bring the cpu up */
1381 : idle = idle_thread_get(cpu);
1382 : if (IS_ERR(idle)) {
1383 : ret = PTR_ERR(idle);
1384 : goto out;
1385 : }
1386 : }
1387 :
1388 : cpuhp_tasks_frozen = tasks_frozen;
1389 :
1390 : cpuhp_set_state(cpu, st, target);
1391 : /*
1392 : * If the current CPU state is in the range of the AP hotplug thread,
1393 : * then we need to kick the thread once more.
1394 : */
1395 : if (st->state > CPUHP_BRINGUP_CPU) {
1396 : ret = cpuhp_kick_ap_work(cpu);
1397 : /*
1398 : * The AP side has done the error rollback already. Just
1399 : * return the error code..
1400 : */
1401 : if (ret)
1402 : goto out;
1403 : }
1404 :
1405 : /*
1406 : * Try to reach the target state. We max out on the BP at
1407 : * CPUHP_BRINGUP_CPU. After that the AP hotplug thread is
1408 : * responsible for bringing it up to the target state.
1409 : */
1410 : target = min((int)target, CPUHP_BRINGUP_CPU);
1411 : ret = cpuhp_up_callbacks(cpu, st, target);
1412 : out:
1413 : cpus_write_unlock();
1414 : arch_smt_update();
1415 : cpu_up_down_serialize_trainwrecks(tasks_frozen);
1416 : return ret;
1417 : }
1418 :
1419 : static int cpu_up(unsigned int cpu, enum cpuhp_state target)
1420 : {
1421 : int err = 0;
1422 :
1423 : if (!cpu_possible(cpu)) {
1424 : pr_err("can't online cpu %d because it is not configured as may-hotadd at boot time\n",
1425 : cpu);
1426 : #if defined(CONFIG_IA64)
1427 : pr_err("please check additional_cpus= boot parameter\n");
1428 : #endif
1429 : return -EINVAL;
1430 : }
1431 :
1432 : err = try_online_node(cpu_to_node(cpu));
1433 : if (err)
1434 : return err;
1435 :
1436 : cpu_maps_update_begin();
1437 :
1438 : if (cpu_hotplug_disabled) {
1439 : err = -EBUSY;
1440 : goto out;
1441 : }
1442 : if (!cpu_smt_allowed(cpu)) {
1443 : err = -EPERM;
1444 : goto out;
1445 : }
1446 :
1447 : err = _cpu_up(cpu, 0, target);
1448 : out:
1449 : cpu_maps_update_done();
1450 : return err;
1451 : }
1452 :
1453 : /**
1454 : * cpu_device_up - Bring up a cpu device
1455 : * @dev: Pointer to the cpu device to online
1456 : *
1457 : * This function is meant to be used by device core cpu subsystem only.
1458 : *
1459 : * Other subsystems should use add_cpu() instead.
1460 : *
1461 : * Return: %0 on success or a negative errno code
1462 : */
1463 : int cpu_device_up(struct device *dev)
1464 : {
1465 : return cpu_up(dev->id, CPUHP_ONLINE);
1466 : }
1467 :
1468 : int add_cpu(unsigned int cpu)
1469 : {
1470 : int ret;
1471 :
1472 : lock_device_hotplug();
1473 : ret = device_online(get_cpu_device(cpu));
1474 : unlock_device_hotplug();
1475 :
1476 : return ret;
1477 : }
1478 : EXPORT_SYMBOL_GPL(add_cpu);
1479 :
1480 : /**
1481 : * bringup_hibernate_cpu - Bring up the CPU that we hibernated on
1482 : * @sleep_cpu: The cpu we hibernated on and should be brought up.
1483 : *
1484 : * On some architectures like arm64, we can hibernate on any CPU, but on
1485 : * wake up the CPU we hibernated on might be offline as a side effect of
1486 : * using maxcpus= for example.
1487 : *
1488 : * Return: %0 on success or a negative errno code
1489 : */
1490 : int bringup_hibernate_cpu(unsigned int sleep_cpu)
1491 : {
1492 : int ret;
1493 :
1494 : if (!cpu_online(sleep_cpu)) {
1495 : pr_info("Hibernated on a CPU that is offline! Bringing CPU up.\n");
1496 : ret = cpu_up(sleep_cpu, CPUHP_ONLINE);
1497 : if (ret) {
1498 : pr_err("Failed to bring hibernate-CPU up!\n");
1499 : return ret;
1500 : }
1501 : }
1502 : return 0;
1503 : }
1504 :
1505 : void bringup_nonboot_cpus(unsigned int setup_max_cpus)
1506 : {
1507 : unsigned int cpu;
1508 :
1509 : for_each_present_cpu(cpu) {
1510 : if (num_online_cpus() >= setup_max_cpus)
1511 : break;
1512 : if (!cpu_online(cpu))
1513 : cpu_up(cpu, CPUHP_ONLINE);
1514 : }
1515 : }
1516 :
1517 : #ifdef CONFIG_PM_SLEEP_SMP
1518 : static cpumask_var_t frozen_cpus;
1519 :
1520 : int freeze_secondary_cpus(int primary)
1521 : {
1522 : int cpu, error = 0;
1523 :
1524 : cpu_maps_update_begin();
1525 : if (primary == -1) {
1526 : primary = cpumask_first(cpu_online_mask);
1527 : if (!housekeeping_cpu(primary, HK_TYPE_TIMER))
1528 : primary = housekeeping_any_cpu(HK_TYPE_TIMER);
1529 : } else {
1530 : if (!cpu_online(primary))
1531 : primary = cpumask_first(cpu_online_mask);
1532 : }
1533 :
1534 : /*
1535 : * We take down all of the non-boot CPUs in one shot to avoid races
1536 : * with the userspace trying to use the CPU hotplug at the same time
1537 : */
1538 : cpumask_clear(frozen_cpus);
1539 :
1540 : pr_info("Disabling non-boot CPUs ...\n");
1541 : for_each_online_cpu(cpu) {
1542 : if (cpu == primary)
1543 : continue;
1544 :
1545 : if (pm_wakeup_pending()) {
1546 : pr_info("Wakeup pending. Abort CPU freeze\n");
1547 : error = -EBUSY;
1548 : break;
1549 : }
1550 :
1551 : trace_suspend_resume(TPS("CPU_OFF"), cpu, true);
1552 : error = _cpu_down(cpu, 1, CPUHP_OFFLINE);
1553 : trace_suspend_resume(TPS("CPU_OFF"), cpu, false);
1554 : if (!error)
1555 : cpumask_set_cpu(cpu, frozen_cpus);
1556 : else {
1557 : pr_err("Error taking CPU%d down: %d\n", cpu, error);
1558 : break;
1559 : }
1560 : }
1561 :
1562 : if (!error)
1563 : BUG_ON(num_online_cpus() > 1);
1564 : else
1565 : pr_err("Non-boot CPUs are not disabled\n");
1566 :
1567 : /*
1568 : * Make sure the CPUs won't be enabled by someone else. We need to do
1569 : * this even in case of failure as all freeze_secondary_cpus() users are
1570 : * supposed to do thaw_secondary_cpus() on the failure path.
1571 : */
1572 : cpu_hotplug_disabled++;
1573 :
1574 : cpu_maps_update_done();
1575 : return error;
1576 : }
1577 :
1578 : void __weak arch_thaw_secondary_cpus_begin(void)
1579 : {
1580 : }
1581 :
1582 : void __weak arch_thaw_secondary_cpus_end(void)
1583 : {
1584 : }
1585 :
1586 : void thaw_secondary_cpus(void)
1587 : {
1588 : int cpu, error;
1589 :
1590 : /* Allow everyone to use the CPU hotplug again */
1591 : cpu_maps_update_begin();
1592 : __cpu_hotplug_enable();
1593 : if (cpumask_empty(frozen_cpus))
1594 : goto out;
1595 :
1596 : pr_info("Enabling non-boot CPUs ...\n");
1597 :
1598 : arch_thaw_secondary_cpus_begin();
1599 :
1600 : for_each_cpu(cpu, frozen_cpus) {
1601 : trace_suspend_resume(TPS("CPU_ON"), cpu, true);
1602 : error = _cpu_up(cpu, 1, CPUHP_ONLINE);
1603 : trace_suspend_resume(TPS("CPU_ON"), cpu, false);
1604 : if (!error) {
1605 : pr_info("CPU%d is up\n", cpu);
1606 : continue;
1607 : }
1608 : pr_warn("Error taking CPU%d up: %d\n", cpu, error);
1609 : }
1610 :
1611 : arch_thaw_secondary_cpus_end();
1612 :
1613 : cpumask_clear(frozen_cpus);
1614 : out:
1615 : cpu_maps_update_done();
1616 : }
1617 :
1618 : static int __init alloc_frozen_cpus(void)
1619 : {
1620 : if (!alloc_cpumask_var(&frozen_cpus, GFP_KERNEL|__GFP_ZERO))
1621 : return -ENOMEM;
1622 : return 0;
1623 : }
1624 : core_initcall(alloc_frozen_cpus);
1625 :
1626 : /*
1627 : * When callbacks for CPU hotplug notifications are being executed, we must
1628 : * ensure that the state of the system with respect to the tasks being frozen
1629 : * or not, as reported by the notification, remains unchanged *throughout the
1630 : * duration* of the execution of the callbacks.
1631 : * Hence we need to prevent the freezer from racing with regular CPU hotplug.
1632 : *
1633 : * This synchronization is implemented by mutually excluding regular CPU
1634 : * hotplug and Suspend/Hibernate call paths by hooking onto the Suspend/
1635 : * Hibernate notifications.
1636 : */
1637 : static int
1638 : cpu_hotplug_pm_callback(struct notifier_block *nb,
1639 : unsigned long action, void *ptr)
1640 : {
1641 : switch (action) {
1642 :
1643 : case PM_SUSPEND_PREPARE:
1644 : case PM_HIBERNATION_PREPARE:
1645 : cpu_hotplug_disable();
1646 : break;
1647 :
1648 : case PM_POST_SUSPEND:
1649 : case PM_POST_HIBERNATION:
1650 : cpu_hotplug_enable();
1651 : break;
1652 :
1653 : default:
1654 : return NOTIFY_DONE;
1655 : }
1656 :
1657 : return NOTIFY_OK;
1658 : }
1659 :
1660 :
1661 : static int __init cpu_hotplug_pm_sync_init(void)
1662 : {
1663 : /*
1664 : * cpu_hotplug_pm_callback has higher priority than x86
1665 : * bsp_pm_callback which depends on cpu_hotplug_pm_callback
1666 : * to disable cpu hotplug to avoid cpu hotplug race.
1667 : */
1668 : pm_notifier(cpu_hotplug_pm_callback, 0);
1669 : return 0;
1670 : }
1671 : core_initcall(cpu_hotplug_pm_sync_init);
1672 :
1673 : #endif /* CONFIG_PM_SLEEP_SMP */
1674 :
1675 : int __boot_cpu_id;
1676 :
1677 : #endif /* CONFIG_SMP */
1678 :
1679 : /* Boot processor state steps */
1680 : static struct cpuhp_step cpuhp_hp_states[] = {
1681 : [CPUHP_OFFLINE] = {
1682 : .name = "offline",
1683 : .startup.single = NULL,
1684 : .teardown.single = NULL,
1685 : },
1686 : #ifdef CONFIG_SMP
1687 : [CPUHP_CREATE_THREADS]= {
1688 : .name = "threads:prepare",
1689 : .startup.single = smpboot_create_threads,
1690 : .teardown.single = NULL,
1691 : .cant_stop = true,
1692 : },
1693 : [CPUHP_PERF_PREPARE] = {
1694 : .name = "perf:prepare",
1695 : .startup.single = perf_event_init_cpu,
1696 : .teardown.single = perf_event_exit_cpu,
1697 : },
1698 : [CPUHP_RANDOM_PREPARE] = {
1699 : .name = "random:prepare",
1700 : .startup.single = random_prepare_cpu,
1701 : .teardown.single = NULL,
1702 : },
1703 : [CPUHP_WORKQUEUE_PREP] = {
1704 : .name = "workqueue:prepare",
1705 : .startup.single = workqueue_prepare_cpu,
1706 : .teardown.single = NULL,
1707 : },
1708 : [CPUHP_HRTIMERS_PREPARE] = {
1709 : .name = "hrtimers:prepare",
1710 : .startup.single = hrtimers_prepare_cpu,
1711 : .teardown.single = hrtimers_dead_cpu,
1712 : },
1713 : [CPUHP_SMPCFD_PREPARE] = {
1714 : .name = "smpcfd:prepare",
1715 : .startup.single = smpcfd_prepare_cpu,
1716 : .teardown.single = smpcfd_dead_cpu,
1717 : },
1718 : [CPUHP_RELAY_PREPARE] = {
1719 : .name = "relay:prepare",
1720 : .startup.single = relay_prepare_cpu,
1721 : .teardown.single = NULL,
1722 : },
1723 : [CPUHP_SLAB_PREPARE] = {
1724 : .name = "slab:prepare",
1725 : .startup.single = slab_prepare_cpu,
1726 : .teardown.single = slab_dead_cpu,
1727 : },
1728 : [CPUHP_RCUTREE_PREP] = {
1729 : .name = "RCU/tree:prepare",
1730 : .startup.single = rcutree_prepare_cpu,
1731 : .teardown.single = rcutree_dead_cpu,
1732 : },
1733 : /*
1734 : * On the tear-down path, timers_dead_cpu() must be invoked
1735 : * before blk_mq_queue_reinit_notify() from notify_dead(),
1736 : * otherwise a RCU stall occurs.
1737 : */
1738 : [CPUHP_TIMERS_PREPARE] = {
1739 : .name = "timers:prepare",
1740 : .startup.single = timers_prepare_cpu,
1741 : .teardown.single = timers_dead_cpu,
1742 : },
1743 : /* Kicks the plugged cpu into life */
1744 : [CPUHP_BRINGUP_CPU] = {
1745 : .name = "cpu:bringup",
1746 : .startup.single = bringup_cpu,
1747 : .teardown.single = finish_cpu,
1748 : .cant_stop = true,
1749 : },
1750 : /* Final state before CPU kills itself */
1751 : [CPUHP_AP_IDLE_DEAD] = {
1752 : .name = "idle:dead",
1753 : },
1754 : /*
1755 : * Last state before CPU enters the idle loop to die. Transient state
1756 : * for synchronization.
1757 : */
1758 : [CPUHP_AP_OFFLINE] = {
1759 : .name = "ap:offline",
1760 : .cant_stop = true,
1761 : },
1762 : /* First state is scheduler control. Interrupts are disabled */
1763 : [CPUHP_AP_SCHED_STARTING] = {
1764 : .name = "sched:starting",
1765 : .startup.single = sched_cpu_starting,
1766 : .teardown.single = sched_cpu_dying,
1767 : },
1768 : [CPUHP_AP_RCUTREE_DYING] = {
1769 : .name = "RCU/tree:dying",
1770 : .startup.single = NULL,
1771 : .teardown.single = rcutree_dying_cpu,
1772 : },
1773 : [CPUHP_AP_SMPCFD_DYING] = {
1774 : .name = "smpcfd:dying",
1775 : .startup.single = NULL,
1776 : .teardown.single = smpcfd_dying_cpu,
1777 : },
1778 : /* Entry state on starting. Interrupts enabled from here on. Transient
1779 : * state for synchronsization */
1780 : [CPUHP_AP_ONLINE] = {
1781 : .name = "ap:online",
1782 : },
1783 : /*
1784 : * Handled on control processor until the plugged processor manages
1785 : * this itself.
1786 : */
1787 : [CPUHP_TEARDOWN_CPU] = {
1788 : .name = "cpu:teardown",
1789 : .startup.single = NULL,
1790 : .teardown.single = takedown_cpu,
1791 : .cant_stop = true,
1792 : },
1793 :
1794 : [CPUHP_AP_SCHED_WAIT_EMPTY] = {
1795 : .name = "sched:waitempty",
1796 : .startup.single = NULL,
1797 : .teardown.single = sched_cpu_wait_empty,
1798 : },
1799 :
1800 : /* Handle smpboot threads park/unpark */
1801 : [CPUHP_AP_SMPBOOT_THREADS] = {
1802 : .name = "smpboot/threads:online",
1803 : .startup.single = smpboot_unpark_threads,
1804 : .teardown.single = smpboot_park_threads,
1805 : },
1806 : [CPUHP_AP_IRQ_AFFINITY_ONLINE] = {
1807 : .name = "irq/affinity:online",
1808 : .startup.single = irq_affinity_online_cpu,
1809 : .teardown.single = NULL,
1810 : },
1811 : [CPUHP_AP_PERF_ONLINE] = {
1812 : .name = "perf:online",
1813 : .startup.single = perf_event_init_cpu,
1814 : .teardown.single = perf_event_exit_cpu,
1815 : },
1816 : [CPUHP_AP_WATCHDOG_ONLINE] = {
1817 : .name = "lockup_detector:online",
1818 : .startup.single = lockup_detector_online_cpu,
1819 : .teardown.single = lockup_detector_offline_cpu,
1820 : },
1821 : [CPUHP_AP_WORKQUEUE_ONLINE] = {
1822 : .name = "workqueue:online",
1823 : .startup.single = workqueue_online_cpu,
1824 : .teardown.single = workqueue_offline_cpu,
1825 : },
1826 : [CPUHP_AP_RANDOM_ONLINE] = {
1827 : .name = "random:online",
1828 : .startup.single = random_online_cpu,
1829 : .teardown.single = NULL,
1830 : },
1831 : [CPUHP_AP_RCUTREE_ONLINE] = {
1832 : .name = "RCU/tree:online",
1833 : .startup.single = rcutree_online_cpu,
1834 : .teardown.single = rcutree_offline_cpu,
1835 : },
1836 : #endif
1837 : /*
1838 : * The dynamically registered state space is here
1839 : */
1840 :
1841 : #ifdef CONFIG_SMP
1842 : /* Last state is scheduler control setting the cpu active */
1843 : [CPUHP_AP_ACTIVE] = {
1844 : .name = "sched:active",
1845 : .startup.single = sched_cpu_activate,
1846 : .teardown.single = sched_cpu_deactivate,
1847 : },
1848 : #endif
1849 :
1850 : /* CPU is fully up and running. */
1851 : [CPUHP_ONLINE] = {
1852 : .name = "online",
1853 : .startup.single = NULL,
1854 : .teardown.single = NULL,
1855 : },
1856 : };
1857 :
1858 : /* Sanity check for callbacks */
1859 : static int cpuhp_cb_check(enum cpuhp_state state)
1860 : {
1861 18 : if (state <= CPUHP_OFFLINE || state >= CPUHP_ONLINE)
1862 : return -EINVAL;
1863 : return 0;
1864 : }
1865 :
1866 : /*
1867 : * Returns a free for dynamic slot assignment of the Online state. The states
1868 : * are protected by the cpuhp_slot_states mutex and an empty slot is identified
1869 : * by having no name assigned.
1870 : */
1871 5 : static int cpuhp_reserve_state(enum cpuhp_state state)
1872 : {
1873 : enum cpuhp_state i, end;
1874 : struct cpuhp_step *step;
1875 :
1876 5 : switch (state) {
1877 : case CPUHP_AP_ONLINE_DYN:
1878 : step = cpuhp_hp_states + CPUHP_AP_ONLINE_DYN;
1879 : end = CPUHP_AP_ONLINE_DYN_END;
1880 : break;
1881 : case CPUHP_BP_PREPARE_DYN:
1882 1 : step = cpuhp_hp_states + CPUHP_BP_PREPARE_DYN;
1883 1 : end = CPUHP_BP_PREPARE_DYN_END;
1884 1 : break;
1885 : default:
1886 : return -EINVAL;
1887 : }
1888 :
1889 11 : for (i = state; i <= end; i++, step++) {
1890 11 : if (!step->name)
1891 : return i;
1892 : }
1893 0 : WARN(1, "No more dynamic states available for CPU hotplug\n");
1894 0 : return -ENOSPC;
1895 : }
1896 :
1897 18 : static int cpuhp_store_callbacks(enum cpuhp_state state, const char *name,
1898 : int (*startup)(unsigned int cpu),
1899 : int (*teardown)(unsigned int cpu),
1900 : bool multi_instance)
1901 : {
1902 : /* (Un)Install the callbacks for further cpu hotplug operations */
1903 : struct cpuhp_step *sp;
1904 19 : int ret = 0;
1905 :
1906 : /*
1907 : * If name is NULL, then the state gets removed.
1908 : *
1909 : * CPUHP_AP_ONLINE_DYN and CPUHP_BP_PREPARE_DYN are handed out on
1910 : * the first allocation from these dynamic ranges, so the removal
1911 : * would trigger a new allocation and clear the wrong (already
1912 : * empty) state, leaving the callbacks of the to be cleared state
1913 : * dangling, which causes wreckage on the next hotplug operation.
1914 : */
1915 36 : if (name && (state == CPUHP_AP_ONLINE_DYN ||
1916 18 : state == CPUHP_BP_PREPARE_DYN)) {
1917 5 : ret = cpuhp_reserve_state(state);
1918 5 : if (ret < 0)
1919 : return ret;
1920 : state = ret;
1921 : }
1922 19 : sp = cpuhp_get_step(state);
1923 18 : if (name && sp->name)
1924 : return -EBUSY;
1925 :
1926 19 : sp->startup.single = startup;
1927 19 : sp->teardown.single = teardown;
1928 19 : sp->name = name;
1929 19 : sp->multi_instance = multi_instance;
1930 19 : INIT_HLIST_HEAD(&sp->list);
1931 18 : return ret;
1932 : }
1933 :
1934 : static void *cpuhp_get_teardown_cb(enum cpuhp_state state)
1935 : {
1936 0 : return cpuhp_get_step(state)->teardown.single;
1937 : }
1938 :
1939 : /*
1940 : * Call the startup/teardown function for a step either on the AP or
1941 : * on the current CPU.
1942 : */
1943 3 : static int cpuhp_issue_call(int cpu, enum cpuhp_state state, bool bringup,
1944 : struct hlist_node *node)
1945 : {
1946 3 : struct cpuhp_step *sp = cpuhp_get_step(state);
1947 : int ret;
1948 :
1949 : /*
1950 : * If there's nothing to do, we done.
1951 : * Relies on the union for multi_instance.
1952 : */
1953 6 : if (cpuhp_step_empty(bringup, sp))
1954 : return 0;
1955 : /*
1956 : * The non AP bound callbacks can fail on bringup. On teardown
1957 : * e.g. module removal we crash for now.
1958 : */
1959 : #ifdef CONFIG_SMP
1960 : if (cpuhp_is_ap_state(state))
1961 : ret = cpuhp_invoke_ap_callback(cpu, state, bringup, node);
1962 : else
1963 : ret = cpuhp_invoke_callback(cpu, state, bringup, node, NULL);
1964 : #else
1965 3 : ret = cpuhp_invoke_callback(cpu, state, bringup, node, NULL);
1966 : #endif
1967 3 : BUG_ON(ret && !bringup);
1968 : return ret;
1969 : }
1970 :
1971 : /*
1972 : * Called from __cpuhp_setup_state on a recoverable failure.
1973 : *
1974 : * Note: The teardown callbacks for rollback are not allowed to fail!
1975 : */
1976 1 : static void cpuhp_rollback_install(int failedcpu, enum cpuhp_state state,
1977 : struct hlist_node *node)
1978 : {
1979 : int cpu;
1980 :
1981 : /* Roll back the already executed steps on the other cpus */
1982 1 : for_each_present_cpu(cpu) {
1983 1 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
1984 1 : int cpustate = st->state;
1985 :
1986 1 : if (cpu >= failedcpu)
1987 : break;
1988 :
1989 : /* Did we invoke the startup call on that cpu ? */
1990 0 : if (cpustate >= state)
1991 0 : cpuhp_issue_call(cpu, state, false, node);
1992 : }
1993 1 : }
1994 :
1995 2 : int __cpuhp_state_add_instance_cpuslocked(enum cpuhp_state state,
1996 : struct hlist_node *node,
1997 : bool invoke)
1998 : {
1999 : struct cpuhp_step *sp;
2000 : int cpu;
2001 : int ret;
2002 :
2003 2 : lockdep_assert_cpus_held();
2004 :
2005 2 : sp = cpuhp_get_step(state);
2006 2 : if (sp->multi_instance == false)
2007 : return -EINVAL;
2008 :
2009 2 : mutex_lock(&cpuhp_state_mutex);
2010 :
2011 2 : if (!invoke || !sp->startup.multi)
2012 : goto add_node;
2013 :
2014 : /*
2015 : * Try to call the startup callback for each present cpu
2016 : * depending on the hotplug state of the cpu.
2017 : */
2018 0 : for_each_present_cpu(cpu) {
2019 0 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
2020 0 : int cpustate = st->state;
2021 :
2022 0 : if (cpustate < state)
2023 0 : continue;
2024 :
2025 0 : ret = cpuhp_issue_call(cpu, state, true, node);
2026 0 : if (ret) {
2027 0 : if (sp->teardown.multi)
2028 0 : cpuhp_rollback_install(cpu, state, node);
2029 : goto unlock;
2030 : }
2031 : }
2032 : add_node:
2033 2 : ret = 0;
2034 2 : hlist_add_head(node, &sp->list);
2035 : unlock:
2036 2 : mutex_unlock(&cpuhp_state_mutex);
2037 2 : return ret;
2038 : }
2039 :
2040 2 : int __cpuhp_state_add_instance(enum cpuhp_state state, struct hlist_node *node,
2041 : bool invoke)
2042 : {
2043 : int ret;
2044 :
2045 : cpus_read_lock();
2046 2 : ret = __cpuhp_state_add_instance_cpuslocked(state, node, invoke);
2047 : cpus_read_unlock();
2048 2 : return ret;
2049 : }
2050 : EXPORT_SYMBOL_GPL(__cpuhp_state_add_instance);
2051 :
2052 : /**
2053 : * __cpuhp_setup_state_cpuslocked - Setup the callbacks for an hotplug machine state
2054 : * @state: The state to setup
2055 : * @name: Name of the step
2056 : * @invoke: If true, the startup function is invoked for cpus where
2057 : * cpu state >= @state
2058 : * @startup: startup callback function
2059 : * @teardown: teardown callback function
2060 : * @multi_instance: State is set up for multiple instances which get
2061 : * added afterwards.
2062 : *
2063 : * The caller needs to hold cpus read locked while calling this function.
2064 : * Return:
2065 : * On success:
2066 : * Positive state number if @state is CPUHP_AP_ONLINE_DYN;
2067 : * 0 for all other states
2068 : * On failure: proper (negative) error code
2069 : */
2070 18 : int __cpuhp_setup_state_cpuslocked(enum cpuhp_state state,
2071 : const char *name, bool invoke,
2072 : int (*startup)(unsigned int cpu),
2073 : int (*teardown)(unsigned int cpu),
2074 : bool multi_instance)
2075 : {
2076 18 : int cpu, ret = 0;
2077 : bool dynstate;
2078 :
2079 18 : lockdep_assert_cpus_held();
2080 :
2081 18 : if (cpuhp_cb_check(state) || !name)
2082 : return -EINVAL;
2083 :
2084 18 : mutex_lock(&cpuhp_state_mutex);
2085 :
2086 18 : ret = cpuhp_store_callbacks(state, name, startup, teardown,
2087 : multi_instance);
2088 :
2089 18 : dynstate = state == CPUHP_AP_ONLINE_DYN;
2090 18 : if (ret > 0 && dynstate) {
2091 4 : state = ret;
2092 4 : ret = 0;
2093 : }
2094 :
2095 18 : if (ret || !invoke || !startup)
2096 : goto out;
2097 :
2098 : /*
2099 : * Try to call the startup callback for each present cpu
2100 : * depending on the hotplug state of the cpu.
2101 : */
2102 2 : for_each_present_cpu(cpu) {
2103 3 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
2104 3 : int cpustate = st->state;
2105 :
2106 3 : if (cpustate < state)
2107 0 : continue;
2108 :
2109 3 : ret = cpuhp_issue_call(cpu, state, true, NULL);
2110 3 : if (ret) {
2111 1 : if (teardown)
2112 1 : cpuhp_rollback_install(cpu, state, NULL);
2113 : cpuhp_store_callbacks(state, NULL, NULL, NULL, false);
2114 : goto out;
2115 : }
2116 : }
2117 : out:
2118 18 : mutex_unlock(&cpuhp_state_mutex);
2119 : /*
2120 : * If the requested state is CPUHP_AP_ONLINE_DYN, return the
2121 : * dynamically allocated state in case of success.
2122 : */
2123 18 : if (!ret && dynstate)
2124 : return state;
2125 14 : return ret;
2126 : }
2127 : EXPORT_SYMBOL(__cpuhp_setup_state_cpuslocked);
2128 :
2129 18 : int __cpuhp_setup_state(enum cpuhp_state state,
2130 : const char *name, bool invoke,
2131 : int (*startup)(unsigned int cpu),
2132 : int (*teardown)(unsigned int cpu),
2133 : bool multi_instance)
2134 : {
2135 : int ret;
2136 :
2137 : cpus_read_lock();
2138 18 : ret = __cpuhp_setup_state_cpuslocked(state, name, invoke, startup,
2139 : teardown, multi_instance);
2140 : cpus_read_unlock();
2141 18 : return ret;
2142 : }
2143 : EXPORT_SYMBOL(__cpuhp_setup_state);
2144 :
2145 0 : int __cpuhp_state_remove_instance(enum cpuhp_state state,
2146 : struct hlist_node *node, bool invoke)
2147 : {
2148 0 : struct cpuhp_step *sp = cpuhp_get_step(state);
2149 : int cpu;
2150 :
2151 0 : BUG_ON(cpuhp_cb_check(state));
2152 :
2153 0 : if (!sp->multi_instance)
2154 : return -EINVAL;
2155 :
2156 : cpus_read_lock();
2157 0 : mutex_lock(&cpuhp_state_mutex);
2158 :
2159 0 : if (!invoke || !cpuhp_get_teardown_cb(state))
2160 : goto remove;
2161 : /*
2162 : * Call the teardown callback for each present cpu depending
2163 : * on the hotplug state of the cpu. This function is not
2164 : * allowed to fail currently!
2165 : */
2166 0 : for_each_present_cpu(cpu) {
2167 0 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
2168 0 : int cpustate = st->state;
2169 :
2170 0 : if (cpustate >= state)
2171 0 : cpuhp_issue_call(cpu, state, false, node);
2172 : }
2173 :
2174 : remove:
2175 0 : hlist_del(node);
2176 0 : mutex_unlock(&cpuhp_state_mutex);
2177 : cpus_read_unlock();
2178 :
2179 0 : return 0;
2180 : }
2181 : EXPORT_SYMBOL_GPL(__cpuhp_state_remove_instance);
2182 :
2183 : /**
2184 : * __cpuhp_remove_state_cpuslocked - Remove the callbacks for an hotplug machine state
2185 : * @state: The state to remove
2186 : * @invoke: If true, the teardown function is invoked for cpus where
2187 : * cpu state >= @state
2188 : *
2189 : * The caller needs to hold cpus read locked while calling this function.
2190 : * The teardown callback is currently not allowed to fail. Think
2191 : * about module removal!
2192 : */
2193 0 : void __cpuhp_remove_state_cpuslocked(enum cpuhp_state state, bool invoke)
2194 : {
2195 0 : struct cpuhp_step *sp = cpuhp_get_step(state);
2196 : int cpu;
2197 :
2198 0 : BUG_ON(cpuhp_cb_check(state));
2199 :
2200 : lockdep_assert_cpus_held();
2201 :
2202 0 : mutex_lock(&cpuhp_state_mutex);
2203 0 : if (sp->multi_instance) {
2204 0 : WARN(!hlist_empty(&sp->list),
2205 : "Error: Removing state %d which has instances left.\n",
2206 : state);
2207 : goto remove;
2208 : }
2209 :
2210 0 : if (!invoke || !cpuhp_get_teardown_cb(state))
2211 : goto remove;
2212 :
2213 : /*
2214 : * Call the teardown callback for each present cpu depending
2215 : * on the hotplug state of the cpu. This function is not
2216 : * allowed to fail currently!
2217 : */
2218 0 : for_each_present_cpu(cpu) {
2219 0 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
2220 0 : int cpustate = st->state;
2221 :
2222 0 : if (cpustate >= state)
2223 0 : cpuhp_issue_call(cpu, state, false, NULL);
2224 : }
2225 : remove:
2226 0 : cpuhp_store_callbacks(state, NULL, NULL, NULL, false);
2227 0 : mutex_unlock(&cpuhp_state_mutex);
2228 0 : }
2229 : EXPORT_SYMBOL(__cpuhp_remove_state_cpuslocked);
2230 :
2231 0 : void __cpuhp_remove_state(enum cpuhp_state state, bool invoke)
2232 : {
2233 : cpus_read_lock();
2234 0 : __cpuhp_remove_state_cpuslocked(state, invoke);
2235 : cpus_read_unlock();
2236 0 : }
2237 : EXPORT_SYMBOL(__cpuhp_remove_state);
2238 :
2239 : #ifdef CONFIG_HOTPLUG_SMT
2240 : static void cpuhp_offline_cpu_device(unsigned int cpu)
2241 : {
2242 : struct device *dev = get_cpu_device(cpu);
2243 :
2244 : dev->offline = true;
2245 : /* Tell user space about the state change */
2246 : kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
2247 : }
2248 :
2249 : static void cpuhp_online_cpu_device(unsigned int cpu)
2250 : {
2251 : struct device *dev = get_cpu_device(cpu);
2252 :
2253 : dev->offline = false;
2254 : /* Tell user space about the state change */
2255 : kobject_uevent(&dev->kobj, KOBJ_ONLINE);
2256 : }
2257 :
2258 : int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
2259 : {
2260 : int cpu, ret = 0;
2261 :
2262 : cpu_maps_update_begin();
2263 : for_each_online_cpu(cpu) {
2264 : if (topology_is_primary_thread(cpu))
2265 : continue;
2266 : ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
2267 : if (ret)
2268 : break;
2269 : /*
2270 : * As this needs to hold the cpu maps lock it's impossible
2271 : * to call device_offline() because that ends up calling
2272 : * cpu_down() which takes cpu maps lock. cpu maps lock
2273 : * needs to be held as this might race against in kernel
2274 : * abusers of the hotplug machinery (thermal management).
2275 : *
2276 : * So nothing would update device:offline state. That would
2277 : * leave the sysfs entry stale and prevent onlining after
2278 : * smt control has been changed to 'off' again. This is
2279 : * called under the sysfs hotplug lock, so it is properly
2280 : * serialized against the regular offline usage.
2281 : */
2282 : cpuhp_offline_cpu_device(cpu);
2283 : }
2284 : if (!ret)
2285 : cpu_smt_control = ctrlval;
2286 : cpu_maps_update_done();
2287 : return ret;
2288 : }
2289 :
2290 : int cpuhp_smt_enable(void)
2291 : {
2292 : int cpu, ret = 0;
2293 :
2294 : cpu_maps_update_begin();
2295 : cpu_smt_control = CPU_SMT_ENABLED;
2296 : for_each_present_cpu(cpu) {
2297 : /* Skip online CPUs and CPUs on offline nodes */
2298 : if (cpu_online(cpu) || !node_online(cpu_to_node(cpu)))
2299 : continue;
2300 : ret = _cpu_up(cpu, 0, CPUHP_ONLINE);
2301 : if (ret)
2302 : break;
2303 : /* See comment in cpuhp_smt_disable() */
2304 : cpuhp_online_cpu_device(cpu);
2305 : }
2306 : cpu_maps_update_done();
2307 : return ret;
2308 : }
2309 : #endif
2310 :
2311 : #if defined(CONFIG_SYSFS) && defined(CONFIG_HOTPLUG_CPU)
2312 : static ssize_t state_show(struct device *dev,
2313 : struct device_attribute *attr, char *buf)
2314 : {
2315 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id);
2316 :
2317 : return sprintf(buf, "%d\n", st->state);
2318 : }
2319 : static DEVICE_ATTR_RO(state);
2320 :
2321 : static ssize_t target_store(struct device *dev, struct device_attribute *attr,
2322 : const char *buf, size_t count)
2323 : {
2324 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id);
2325 : struct cpuhp_step *sp;
2326 : int target, ret;
2327 :
2328 : ret = kstrtoint(buf, 10, &target);
2329 : if (ret)
2330 : return ret;
2331 :
2332 : #ifdef CONFIG_CPU_HOTPLUG_STATE_CONTROL
2333 : if (target < CPUHP_OFFLINE || target > CPUHP_ONLINE)
2334 : return -EINVAL;
2335 : #else
2336 : if (target != CPUHP_OFFLINE && target != CPUHP_ONLINE)
2337 : return -EINVAL;
2338 : #endif
2339 :
2340 : ret = lock_device_hotplug_sysfs();
2341 : if (ret)
2342 : return ret;
2343 :
2344 : mutex_lock(&cpuhp_state_mutex);
2345 : sp = cpuhp_get_step(target);
2346 : ret = !sp->name || sp->cant_stop ? -EINVAL : 0;
2347 : mutex_unlock(&cpuhp_state_mutex);
2348 : if (ret)
2349 : goto out;
2350 :
2351 : if (st->state < target)
2352 : ret = cpu_up(dev->id, target);
2353 : else if (st->state > target)
2354 : ret = cpu_down(dev->id, target);
2355 : else if (WARN_ON(st->target != target))
2356 : st->target = target;
2357 : out:
2358 : unlock_device_hotplug();
2359 : return ret ? ret : count;
2360 : }
2361 :
2362 : static ssize_t target_show(struct device *dev,
2363 : struct device_attribute *attr, char *buf)
2364 : {
2365 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id);
2366 :
2367 : return sprintf(buf, "%d\n", st->target);
2368 : }
2369 : static DEVICE_ATTR_RW(target);
2370 :
2371 : static ssize_t fail_store(struct device *dev, struct device_attribute *attr,
2372 : const char *buf, size_t count)
2373 : {
2374 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id);
2375 : struct cpuhp_step *sp;
2376 : int fail, ret;
2377 :
2378 : ret = kstrtoint(buf, 10, &fail);
2379 : if (ret)
2380 : return ret;
2381 :
2382 : if (fail == CPUHP_INVALID) {
2383 : st->fail = fail;
2384 : return count;
2385 : }
2386 :
2387 : if (fail < CPUHP_OFFLINE || fail > CPUHP_ONLINE)
2388 : return -EINVAL;
2389 :
2390 : /*
2391 : * Cannot fail STARTING/DYING callbacks.
2392 : */
2393 : if (cpuhp_is_atomic_state(fail))
2394 : return -EINVAL;
2395 :
2396 : /*
2397 : * DEAD callbacks cannot fail...
2398 : * ... neither can CPUHP_BRINGUP_CPU during hotunplug. The latter
2399 : * triggering STARTING callbacks, a failure in this state would
2400 : * hinder rollback.
2401 : */
2402 : if (fail <= CPUHP_BRINGUP_CPU && st->state > CPUHP_BRINGUP_CPU)
2403 : return -EINVAL;
2404 :
2405 : /*
2406 : * Cannot fail anything that doesn't have callbacks.
2407 : */
2408 : mutex_lock(&cpuhp_state_mutex);
2409 : sp = cpuhp_get_step(fail);
2410 : if (!sp->startup.single && !sp->teardown.single)
2411 : ret = -EINVAL;
2412 : mutex_unlock(&cpuhp_state_mutex);
2413 : if (ret)
2414 : return ret;
2415 :
2416 : st->fail = fail;
2417 :
2418 : return count;
2419 : }
2420 :
2421 : static ssize_t fail_show(struct device *dev,
2422 : struct device_attribute *attr, char *buf)
2423 : {
2424 : struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id);
2425 :
2426 : return sprintf(buf, "%d\n", st->fail);
2427 : }
2428 :
2429 : static DEVICE_ATTR_RW(fail);
2430 :
2431 : static struct attribute *cpuhp_cpu_attrs[] = {
2432 : &dev_attr_state.attr,
2433 : &dev_attr_target.attr,
2434 : &dev_attr_fail.attr,
2435 : NULL
2436 : };
2437 :
2438 : static const struct attribute_group cpuhp_cpu_attr_group = {
2439 : .attrs = cpuhp_cpu_attrs,
2440 : .name = "hotplug",
2441 : NULL
2442 : };
2443 :
2444 : static ssize_t states_show(struct device *dev,
2445 : struct device_attribute *attr, char *buf)
2446 : {
2447 : ssize_t cur, res = 0;
2448 : int i;
2449 :
2450 : mutex_lock(&cpuhp_state_mutex);
2451 : for (i = CPUHP_OFFLINE; i <= CPUHP_ONLINE; i++) {
2452 : struct cpuhp_step *sp = cpuhp_get_step(i);
2453 :
2454 : if (sp->name) {
2455 : cur = sprintf(buf, "%3d: %s\n", i, sp->name);
2456 : buf += cur;
2457 : res += cur;
2458 : }
2459 : }
2460 : mutex_unlock(&cpuhp_state_mutex);
2461 : return res;
2462 : }
2463 : static DEVICE_ATTR_RO(states);
2464 :
2465 : static struct attribute *cpuhp_cpu_root_attrs[] = {
2466 : &dev_attr_states.attr,
2467 : NULL
2468 : };
2469 :
2470 : static const struct attribute_group cpuhp_cpu_root_attr_group = {
2471 : .attrs = cpuhp_cpu_root_attrs,
2472 : .name = "hotplug",
2473 : NULL
2474 : };
2475 :
2476 : #ifdef CONFIG_HOTPLUG_SMT
2477 :
2478 : static ssize_t
2479 : __store_smt_control(struct device *dev, struct device_attribute *attr,
2480 : const char *buf, size_t count)
2481 : {
2482 : int ctrlval, ret;
2483 :
2484 : if (sysfs_streq(buf, "on"))
2485 : ctrlval = CPU_SMT_ENABLED;
2486 : else if (sysfs_streq(buf, "off"))
2487 : ctrlval = CPU_SMT_DISABLED;
2488 : else if (sysfs_streq(buf, "forceoff"))
2489 : ctrlval = CPU_SMT_FORCE_DISABLED;
2490 : else
2491 : return -EINVAL;
2492 :
2493 : if (cpu_smt_control == CPU_SMT_FORCE_DISABLED)
2494 : return -EPERM;
2495 :
2496 : if (cpu_smt_control == CPU_SMT_NOT_SUPPORTED)
2497 : return -ENODEV;
2498 :
2499 : ret = lock_device_hotplug_sysfs();
2500 : if (ret)
2501 : return ret;
2502 :
2503 : if (ctrlval != cpu_smt_control) {
2504 : switch (ctrlval) {
2505 : case CPU_SMT_ENABLED:
2506 : ret = cpuhp_smt_enable();
2507 : break;
2508 : case CPU_SMT_DISABLED:
2509 : case CPU_SMT_FORCE_DISABLED:
2510 : ret = cpuhp_smt_disable(ctrlval);
2511 : break;
2512 : }
2513 : }
2514 :
2515 : unlock_device_hotplug();
2516 : return ret ? ret : count;
2517 : }
2518 :
2519 : #else /* !CONFIG_HOTPLUG_SMT */
2520 : static ssize_t
2521 : __store_smt_control(struct device *dev, struct device_attribute *attr,
2522 : const char *buf, size_t count)
2523 : {
2524 : return -ENODEV;
2525 : }
2526 : #endif /* CONFIG_HOTPLUG_SMT */
2527 :
2528 : static const char *smt_states[] = {
2529 : [CPU_SMT_ENABLED] = "on",
2530 : [CPU_SMT_DISABLED] = "off",
2531 : [CPU_SMT_FORCE_DISABLED] = "forceoff",
2532 : [CPU_SMT_NOT_SUPPORTED] = "notsupported",
2533 : [CPU_SMT_NOT_IMPLEMENTED] = "notimplemented",
2534 : };
2535 :
2536 : static ssize_t control_show(struct device *dev,
2537 : struct device_attribute *attr, char *buf)
2538 : {
2539 : const char *state = smt_states[cpu_smt_control];
2540 :
2541 : return snprintf(buf, PAGE_SIZE - 2, "%s\n", state);
2542 : }
2543 :
2544 : static ssize_t control_store(struct device *dev, struct device_attribute *attr,
2545 : const char *buf, size_t count)
2546 : {
2547 : return __store_smt_control(dev, attr, buf, count);
2548 : }
2549 : static DEVICE_ATTR_RW(control);
2550 :
2551 : static ssize_t active_show(struct device *dev,
2552 : struct device_attribute *attr, char *buf)
2553 : {
2554 : return snprintf(buf, PAGE_SIZE - 2, "%d\n", sched_smt_active());
2555 : }
2556 : static DEVICE_ATTR_RO(active);
2557 :
2558 : static struct attribute *cpuhp_smt_attrs[] = {
2559 : &dev_attr_control.attr,
2560 : &dev_attr_active.attr,
2561 : NULL
2562 : };
2563 :
2564 : static const struct attribute_group cpuhp_smt_attr_group = {
2565 : .attrs = cpuhp_smt_attrs,
2566 : .name = "smt",
2567 : NULL
2568 : };
2569 :
2570 : static int __init cpu_smt_sysfs_init(void)
2571 : {
2572 : return sysfs_create_group(&cpu_subsys.dev_root->kobj,
2573 : &cpuhp_smt_attr_group);
2574 : }
2575 :
2576 : static int __init cpuhp_sysfs_init(void)
2577 : {
2578 : int cpu, ret;
2579 :
2580 : ret = cpu_smt_sysfs_init();
2581 : if (ret)
2582 : return ret;
2583 :
2584 : ret = sysfs_create_group(&cpu_subsys.dev_root->kobj,
2585 : &cpuhp_cpu_root_attr_group);
2586 : if (ret)
2587 : return ret;
2588 :
2589 : for_each_possible_cpu(cpu) {
2590 : struct device *dev = get_cpu_device(cpu);
2591 :
2592 : if (!dev)
2593 : continue;
2594 : ret = sysfs_create_group(&dev->kobj, &cpuhp_cpu_attr_group);
2595 : if (ret)
2596 : return ret;
2597 : }
2598 : return 0;
2599 : }
2600 : device_initcall(cpuhp_sysfs_init);
2601 : #endif /* CONFIG_SYSFS && CONFIG_HOTPLUG_CPU */
2602 :
2603 : /*
2604 : * cpu_bit_bitmap[] is a special, "compressed" data structure that
2605 : * represents all NR_CPUS bits binary values of 1<<nr.
2606 : *
2607 : * It is used by cpumask_of() to get a constant address to a CPU
2608 : * mask value that has a single bit set only.
2609 : */
2610 :
2611 : /* cpu_bit_bitmap[0] is empty - so we can back into it */
2612 : #define MASK_DECLARE_1(x) [x+1][0] = (1UL << (x))
2613 : #define MASK_DECLARE_2(x) MASK_DECLARE_1(x), MASK_DECLARE_1(x+1)
2614 : #define MASK_DECLARE_4(x) MASK_DECLARE_2(x), MASK_DECLARE_2(x+2)
2615 : #define MASK_DECLARE_8(x) MASK_DECLARE_4(x), MASK_DECLARE_4(x+4)
2616 :
2617 : const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)] = {
2618 :
2619 : MASK_DECLARE_8(0), MASK_DECLARE_8(8),
2620 : MASK_DECLARE_8(16), MASK_DECLARE_8(24),
2621 : #if BITS_PER_LONG > 32
2622 : MASK_DECLARE_8(32), MASK_DECLARE_8(40),
2623 : MASK_DECLARE_8(48), MASK_DECLARE_8(56),
2624 : #endif
2625 : };
2626 : EXPORT_SYMBOL_GPL(cpu_bit_bitmap);
2627 :
2628 : const DECLARE_BITMAP(cpu_all_bits, NR_CPUS) = CPU_BITS_ALL;
2629 : EXPORT_SYMBOL(cpu_all_bits);
2630 :
2631 : #ifdef CONFIG_INIT_ALL_POSSIBLE
2632 : struct cpumask __cpu_possible_mask __read_mostly
2633 : = {CPU_BITS_ALL};
2634 : #else
2635 : struct cpumask __cpu_possible_mask __read_mostly;
2636 : #endif
2637 : EXPORT_SYMBOL(__cpu_possible_mask);
2638 :
2639 : struct cpumask __cpu_online_mask __read_mostly;
2640 : EXPORT_SYMBOL(__cpu_online_mask);
2641 :
2642 : struct cpumask __cpu_present_mask __read_mostly;
2643 : EXPORT_SYMBOL(__cpu_present_mask);
2644 :
2645 : struct cpumask __cpu_active_mask __read_mostly;
2646 : EXPORT_SYMBOL(__cpu_active_mask);
2647 :
2648 : struct cpumask __cpu_dying_mask __read_mostly;
2649 : EXPORT_SYMBOL(__cpu_dying_mask);
2650 :
2651 : atomic_t __num_online_cpus __read_mostly;
2652 : EXPORT_SYMBOL(__num_online_cpus);
2653 :
2654 0 : void init_cpu_present(const struct cpumask *src)
2655 : {
2656 0 : cpumask_copy(&__cpu_present_mask, src);
2657 0 : }
2658 :
2659 0 : void init_cpu_possible(const struct cpumask *src)
2660 : {
2661 0 : cpumask_copy(&__cpu_possible_mask, src);
2662 0 : }
2663 :
2664 0 : void init_cpu_online(const struct cpumask *src)
2665 : {
2666 0 : cpumask_copy(&__cpu_online_mask, src);
2667 0 : }
2668 :
2669 0 : void set_cpu_online(unsigned int cpu, bool online)
2670 : {
2671 : /*
2672 : * atomic_inc/dec() is required to handle the horrid abuse of this
2673 : * function by the reboot and kexec code which invoke it from
2674 : * IPI/NMI broadcasts when shutting down CPUs. Invocation from
2675 : * regular CPU hotplug is properly serialized.
2676 : *
2677 : * Note, that the fact that __num_online_cpus is of type atomic_t
2678 : * does not protect readers which are not serialized against
2679 : * concurrent hotplug operations.
2680 : */
2681 0 : if (online) {
2682 2 : if (!cpumask_test_and_set_cpu(cpu, &__cpu_online_mask))
2683 : atomic_inc(&__num_online_cpus);
2684 : } else {
2685 0 : if (cpumask_test_and_clear_cpu(cpu, &__cpu_online_mask))
2686 : atomic_dec(&__num_online_cpus);
2687 : }
2688 0 : }
2689 :
2690 : /*
2691 : * Activate the first processor.
2692 : */
2693 1 : void __init boot_cpu_init(void)
2694 : {
2695 1 : int cpu = smp_processor_id();
2696 :
2697 : /* Mark the boot cpu "present", "online" etc for SMP and UP case */
2698 2 : set_cpu_online(cpu, true);
2699 2 : set_cpu_active(cpu, true);
2700 2 : set_cpu_present(cpu, true);
2701 2 : set_cpu_possible(cpu, true);
2702 :
2703 : #ifdef CONFIG_SMP
2704 : __boot_cpu_id = cpu;
2705 : #endif
2706 1 : }
2707 :
2708 : /*
2709 : * Must be called _AFTER_ setting up the per_cpu areas
2710 : */
2711 1 : void __init boot_cpu_hotplug_init(void)
2712 : {
2713 : #ifdef CONFIG_SMP
2714 : cpumask_set_cpu(smp_processor_id(), &cpus_booted_once_mask);
2715 : #endif
2716 3 : this_cpu_write(cpuhp_state.state, CPUHP_ONLINE);
2717 3 : this_cpu_write(cpuhp_state.target, CPUHP_ONLINE);
2718 1 : }
2719 :
2720 : /*
2721 : * These are used for a global "mitigations=" cmdline option for toggling
2722 : * optional CPU mitigations.
2723 : */
2724 : enum cpu_mitigations {
2725 : CPU_MITIGATIONS_OFF,
2726 : CPU_MITIGATIONS_AUTO,
2727 : CPU_MITIGATIONS_AUTO_NOSMT,
2728 : };
2729 :
2730 : static enum cpu_mitigations cpu_mitigations __ro_after_init =
2731 : CPU_MITIGATIONS_AUTO;
2732 :
2733 0 : static int __init mitigations_parse_cmdline(char *arg)
2734 : {
2735 0 : if (!strcmp(arg, "off"))
2736 0 : cpu_mitigations = CPU_MITIGATIONS_OFF;
2737 0 : else if (!strcmp(arg, "auto"))
2738 0 : cpu_mitigations = CPU_MITIGATIONS_AUTO;
2739 0 : else if (!strcmp(arg, "auto,nosmt"))
2740 0 : cpu_mitigations = CPU_MITIGATIONS_AUTO_NOSMT;
2741 : else
2742 0 : pr_crit("Unsupported mitigations=%s, system may still be vulnerable\n",
2743 : arg);
2744 :
2745 0 : return 0;
2746 : }
2747 : early_param("mitigations", mitigations_parse_cmdline);
2748 :
2749 : /* mitigations=off */
2750 0 : bool cpu_mitigations_off(void)
2751 : {
2752 0 : return cpu_mitigations == CPU_MITIGATIONS_OFF;
2753 : }
2754 : EXPORT_SYMBOL_GPL(cpu_mitigations_off);
2755 :
2756 : /* mitigations=auto,nosmt */
2757 0 : bool cpu_mitigations_auto_nosmt(void)
2758 : {
2759 0 : return cpu_mitigations == CPU_MITIGATIONS_AUTO_NOSMT;
2760 : }
2761 : EXPORT_SYMBOL_GPL(cpu_mitigations_auto_nosmt);
|