1 /* CPU control. 2 * (C) 2001, 2002, 2003, 2004 Rusty Russell 3 * 4 * This code is licenced under the GPL. 5 */ 6 #include <linux/proc_fs.h> 7 #include <linux/smp.h> 8 #include <linux/init.h> 9 #include <linux/notifier.h> 10 #include <linux/sched.h> 11 #include <linux/unistd.h> 12 #include <linux/cpu.h> 13 #include <linux/oom.h> 14 #include <linux/rcupdate.h> 15 #include <linux/export.h> 16 #include <linux/bug.h> 17 #include <linux/kthread.h> 18 #include <linux/stop_machine.h> 19 #include <linux/mutex.h> 20 #include <linux/gfp.h> 21 #include <linux/suspend.h> 22 #include <linux/lockdep.h> 23 #include <linux/tick.h> 24 #include <linux/irq.h> 25 #include <linux/smpboot.h> 26 #include <linux/relay.h> 27 #include <linux/slab.h> 28 29 #include <trace/events/power.h> 30 #define CREATE_TRACE_POINTS 31 #include <trace/events/cpuhp.h> 32 33 #include "smpboot.h" 34 35 /** 36 * cpuhp_cpu_state - Per cpu hotplug state storage 37 * @state: The current cpu state 38 * @target: The target state 39 * @thread: Pointer to the hotplug thread 40 * @should_run: Thread should execute 41 * @rollback: Perform a rollback 42 * @single: Single callback invocation 43 * @bringup: Single callback bringup or teardown selector 44 * @cb_state: The state for a single callback (install/uninstall) 45 * @result: Result of the operation 46 * @done: Signal completion to the issuer of the task 47 */ 48 struct cpuhp_cpu_state { 49 enum cpuhp_state state; 50 enum cpuhp_state target; 51 #ifdef CONFIG_SMP 52 struct task_struct *thread; 53 bool should_run; 54 bool rollback; 55 bool single; 56 bool bringup; 57 struct hlist_node *node; 58 enum cpuhp_state cb_state; 59 int result; 60 struct completion done; 61 #endif 62 }; 63 64 static DEFINE_PER_CPU(struct cpuhp_cpu_state, cpuhp_state); 65 66 /** 67 * cpuhp_step - Hotplug state machine step 68 * @name: Name of the step 69 * @startup: Startup function of the step 70 * @teardown: Teardown function of the step 71 * @skip_onerr: Do not invoke the functions on error rollback 72 * Will go away once the notifiers are gone 73 * @cant_stop: Bringup/teardown can't be stopped at this step 74 */ 75 struct cpuhp_step { 76 const char *name; 77 union { 78 int (*single)(unsigned int cpu); 79 int (*multi)(unsigned int cpu, 80 struct hlist_node *node); 81 } startup; 82 union { 83 int (*single)(unsigned int cpu); 84 int (*multi)(unsigned int cpu, 85 struct hlist_node *node); 86 } teardown; 87 struct hlist_head list; 88 bool skip_onerr; 89 bool cant_stop; 90 bool multi_instance; 91 }; 92 93 static DEFINE_MUTEX(cpuhp_state_mutex); 94 static struct cpuhp_step cpuhp_bp_states[]; 95 static struct cpuhp_step cpuhp_ap_states[]; 96 97 static bool cpuhp_is_ap_state(enum cpuhp_state state) 98 { 99 /* 100 * The extra check for CPUHP_TEARDOWN_CPU is only for documentation 101 * purposes as that state is handled explicitly in cpu_down. 102 */ 103 return state > CPUHP_BRINGUP_CPU && state != CPUHP_TEARDOWN_CPU; 104 } 105 106 static struct cpuhp_step *cpuhp_get_step(enum cpuhp_state state) 107 { 108 struct cpuhp_step *sp; 109 110 sp = cpuhp_is_ap_state(state) ? cpuhp_ap_states : cpuhp_bp_states; 111 return sp + state; 112 } 113 114 /** 115 * cpuhp_invoke_callback _ Invoke the callbacks for a given state 116 * @cpu: The cpu for which the callback should be invoked 117 * @step: The step in the state machine 118 * @bringup: True if the bringup callback should be invoked 119 * 120 * Called from cpu hotplug and from the state register machinery. 121 */ 122 static int cpuhp_invoke_callback(unsigned int cpu, enum cpuhp_state state, 123 bool bringup, struct hlist_node *node) 124 { 125 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 126 struct cpuhp_step *step = cpuhp_get_step(state); 127 int (*cbm)(unsigned int cpu, struct hlist_node *node); 128 int (*cb)(unsigned int cpu); 129 int ret, cnt; 130 131 if (!step->multi_instance) { 132 cb = bringup ? step->startup.single : step->teardown.single; 133 if (!cb) 134 return 0; 135 trace_cpuhp_enter(cpu, st->target, state, cb); 136 ret = cb(cpu); 137 trace_cpuhp_exit(cpu, st->state, state, ret); 138 return ret; 139 } 140 cbm = bringup ? step->startup.multi : step->teardown.multi; 141 if (!cbm) 142 return 0; 143 144 /* Single invocation for instance add/remove */ 145 if (node) { 146 trace_cpuhp_multi_enter(cpu, st->target, state, cbm, node); 147 ret = cbm(cpu, node); 148 trace_cpuhp_exit(cpu, st->state, state, ret); 149 return ret; 150 } 151 152 /* State transition. Invoke on all instances */ 153 cnt = 0; 154 hlist_for_each(node, &step->list) { 155 trace_cpuhp_multi_enter(cpu, st->target, state, cbm, node); 156 ret = cbm(cpu, node); 157 trace_cpuhp_exit(cpu, st->state, state, ret); 158 if (ret) 159 goto err; 160 cnt++; 161 } 162 return 0; 163 err: 164 /* Rollback the instances if one failed */ 165 cbm = !bringup ? step->startup.multi : step->teardown.multi; 166 if (!cbm) 167 return ret; 168 169 hlist_for_each(node, &step->list) { 170 if (!cnt--) 171 break; 172 cbm(cpu, node); 173 } 174 return ret; 175 } 176 177 #ifdef CONFIG_SMP 178 /* Serializes the updates to cpu_online_mask, cpu_present_mask */ 179 static DEFINE_MUTEX(cpu_add_remove_lock); 180 bool cpuhp_tasks_frozen; 181 EXPORT_SYMBOL_GPL(cpuhp_tasks_frozen); 182 183 /* 184 * The following two APIs (cpu_maps_update_begin/done) must be used when 185 * attempting to serialize the updates to cpu_online_mask & cpu_present_mask. 186 * The APIs cpu_notifier_register_begin/done() must be used to protect CPU 187 * hotplug callback (un)registration performed using __register_cpu_notifier() 188 * or __unregister_cpu_notifier(). 189 */ 190 void cpu_maps_update_begin(void) 191 { 192 mutex_lock(&cpu_add_remove_lock); 193 } 194 EXPORT_SYMBOL(cpu_notifier_register_begin); 195 196 void cpu_maps_update_done(void) 197 { 198 mutex_unlock(&cpu_add_remove_lock); 199 } 200 EXPORT_SYMBOL(cpu_notifier_register_done); 201 202 static RAW_NOTIFIER_HEAD(cpu_chain); 203 204 /* If set, cpu_up and cpu_down will return -EBUSY and do nothing. 205 * Should always be manipulated under cpu_add_remove_lock 206 */ 207 static int cpu_hotplug_disabled; 208 209 #ifdef CONFIG_HOTPLUG_CPU 210 211 static struct { 212 struct task_struct *active_writer; 213 /* wait queue to wake up the active_writer */ 214 wait_queue_head_t wq; 215 /* verifies that no writer will get active while readers are active */ 216 struct mutex lock; 217 /* 218 * Also blocks the new readers during 219 * an ongoing cpu hotplug operation. 220 */ 221 atomic_t refcount; 222 223 #ifdef CONFIG_DEBUG_LOCK_ALLOC 224 struct lockdep_map dep_map; 225 #endif 226 } cpu_hotplug = { 227 .active_writer = NULL, 228 .wq = __WAIT_QUEUE_HEAD_INITIALIZER(cpu_hotplug.wq), 229 .lock = __MUTEX_INITIALIZER(cpu_hotplug.lock), 230 #ifdef CONFIG_DEBUG_LOCK_ALLOC 231 .dep_map = STATIC_LOCKDEP_MAP_INIT("cpu_hotplug.dep_map", &cpu_hotplug.dep_map), 232 #endif 233 }; 234 235 /* Lockdep annotations for get/put_online_cpus() and cpu_hotplug_begin/end() */ 236 #define cpuhp_lock_acquire_read() lock_map_acquire_read(&cpu_hotplug.dep_map) 237 #define cpuhp_lock_acquire_tryread() \ 238 lock_map_acquire_tryread(&cpu_hotplug.dep_map) 239 #define cpuhp_lock_acquire() lock_map_acquire(&cpu_hotplug.dep_map) 240 #define cpuhp_lock_release() lock_map_release(&cpu_hotplug.dep_map) 241 242 243 void get_online_cpus(void) 244 { 245 might_sleep(); 246 if (cpu_hotplug.active_writer == current) 247 return; 248 cpuhp_lock_acquire_read(); 249 mutex_lock(&cpu_hotplug.lock); 250 atomic_inc(&cpu_hotplug.refcount); 251 mutex_unlock(&cpu_hotplug.lock); 252 } 253 EXPORT_SYMBOL_GPL(get_online_cpus); 254 255 void put_online_cpus(void) 256 { 257 int refcount; 258 259 if (cpu_hotplug.active_writer == current) 260 return; 261 262 refcount = atomic_dec_return(&cpu_hotplug.refcount); 263 if (WARN_ON(refcount < 0)) /* try to fix things up */ 264 atomic_inc(&cpu_hotplug.refcount); 265 266 if (refcount <= 0 && waitqueue_active(&cpu_hotplug.wq)) 267 wake_up(&cpu_hotplug.wq); 268 269 cpuhp_lock_release(); 270 271 } 272 EXPORT_SYMBOL_GPL(put_online_cpus); 273 274 /* 275 * This ensures that the hotplug operation can begin only when the 276 * refcount goes to zero. 277 * 278 * Note that during a cpu-hotplug operation, the new readers, if any, 279 * will be blocked by the cpu_hotplug.lock 280 * 281 * Since cpu_hotplug_begin() is always called after invoking 282 * cpu_maps_update_begin(), we can be sure that only one writer is active. 283 * 284 * Note that theoretically, there is a possibility of a livelock: 285 * - Refcount goes to zero, last reader wakes up the sleeping 286 * writer. 287 * - Last reader unlocks the cpu_hotplug.lock. 288 * - A new reader arrives at this moment, bumps up the refcount. 289 * - The writer acquires the cpu_hotplug.lock finds the refcount 290 * non zero and goes to sleep again. 291 * 292 * However, this is very difficult to achieve in practice since 293 * get_online_cpus() not an api which is called all that often. 294 * 295 */ 296 void cpu_hotplug_begin(void) 297 { 298 DEFINE_WAIT(wait); 299 300 cpu_hotplug.active_writer = current; 301 cpuhp_lock_acquire(); 302 303 for (;;) { 304 mutex_lock(&cpu_hotplug.lock); 305 prepare_to_wait(&cpu_hotplug.wq, &wait, TASK_UNINTERRUPTIBLE); 306 if (likely(!atomic_read(&cpu_hotplug.refcount))) 307 break; 308 mutex_unlock(&cpu_hotplug.lock); 309 schedule(); 310 } 311 finish_wait(&cpu_hotplug.wq, &wait); 312 } 313 314 void cpu_hotplug_done(void) 315 { 316 cpu_hotplug.active_writer = NULL; 317 mutex_unlock(&cpu_hotplug.lock); 318 cpuhp_lock_release(); 319 } 320 321 /* 322 * Wait for currently running CPU hotplug operations to complete (if any) and 323 * disable future CPU hotplug (from sysfs). The 'cpu_add_remove_lock' protects 324 * the 'cpu_hotplug_disabled' flag. The same lock is also acquired by the 325 * hotplug path before performing hotplug operations. So acquiring that lock 326 * guarantees mutual exclusion from any currently running hotplug operations. 327 */ 328 void cpu_hotplug_disable(void) 329 { 330 cpu_maps_update_begin(); 331 cpu_hotplug_disabled++; 332 cpu_maps_update_done(); 333 } 334 EXPORT_SYMBOL_GPL(cpu_hotplug_disable); 335 336 static void __cpu_hotplug_enable(void) 337 { 338 if (WARN_ONCE(!cpu_hotplug_disabled, "Unbalanced cpu hotplug enable\n")) 339 return; 340 cpu_hotplug_disabled--; 341 } 342 343 void cpu_hotplug_enable(void) 344 { 345 cpu_maps_update_begin(); 346 __cpu_hotplug_enable(); 347 cpu_maps_update_done(); 348 } 349 EXPORT_SYMBOL_GPL(cpu_hotplug_enable); 350 #endif /* CONFIG_HOTPLUG_CPU */ 351 352 /* Need to know about CPUs going up/down? */ 353 int register_cpu_notifier(struct notifier_block *nb) 354 { 355 int ret; 356 cpu_maps_update_begin(); 357 ret = raw_notifier_chain_register(&cpu_chain, nb); 358 cpu_maps_update_done(); 359 return ret; 360 } 361 362 int __register_cpu_notifier(struct notifier_block *nb) 363 { 364 return raw_notifier_chain_register(&cpu_chain, nb); 365 } 366 367 static int __cpu_notify(unsigned long val, unsigned int cpu, int nr_to_call, 368 int *nr_calls) 369 { 370 unsigned long mod = cpuhp_tasks_frozen ? CPU_TASKS_FROZEN : 0; 371 void *hcpu = (void *)(long)cpu; 372 373 int ret; 374 375 ret = __raw_notifier_call_chain(&cpu_chain, val | mod, hcpu, nr_to_call, 376 nr_calls); 377 378 return notifier_to_errno(ret); 379 } 380 381 static int cpu_notify(unsigned long val, unsigned int cpu) 382 { 383 return __cpu_notify(val, cpu, -1, NULL); 384 } 385 386 static void cpu_notify_nofail(unsigned long val, unsigned int cpu) 387 { 388 BUG_ON(cpu_notify(val, cpu)); 389 } 390 391 /* Notifier wrappers for transitioning to state machine */ 392 static int notify_prepare(unsigned int cpu) 393 { 394 int nr_calls = 0; 395 int ret; 396 397 ret = __cpu_notify(CPU_UP_PREPARE, cpu, -1, &nr_calls); 398 if (ret) { 399 nr_calls--; 400 printk(KERN_WARNING "%s: attempt to bring up CPU %u failed\n", 401 __func__, cpu); 402 __cpu_notify(CPU_UP_CANCELED, cpu, nr_calls, NULL); 403 } 404 return ret; 405 } 406 407 static int notify_online(unsigned int cpu) 408 { 409 cpu_notify(CPU_ONLINE, cpu); 410 return 0; 411 } 412 413 static int bringup_wait_for_ap(unsigned int cpu) 414 { 415 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 416 417 wait_for_completion(&st->done); 418 return st->result; 419 } 420 421 static int bringup_cpu(unsigned int cpu) 422 { 423 struct task_struct *idle = idle_thread_get(cpu); 424 int ret; 425 426 /* 427 * Some architectures have to walk the irq descriptors to 428 * setup the vector space for the cpu which comes online. 429 * Prevent irq alloc/free across the bringup. 430 */ 431 irq_lock_sparse(); 432 433 /* Arch-specific enabling code. */ 434 ret = __cpu_up(cpu, idle); 435 irq_unlock_sparse(); 436 if (ret) { 437 cpu_notify(CPU_UP_CANCELED, cpu); 438 return ret; 439 } 440 ret = bringup_wait_for_ap(cpu); 441 BUG_ON(!cpu_online(cpu)); 442 return ret; 443 } 444 445 /* 446 * Hotplug state machine related functions 447 */ 448 static void undo_cpu_down(unsigned int cpu, struct cpuhp_cpu_state *st) 449 { 450 for (st->state++; st->state < st->target; st->state++) { 451 struct cpuhp_step *step = cpuhp_get_step(st->state); 452 453 if (!step->skip_onerr) 454 cpuhp_invoke_callback(cpu, st->state, true, NULL); 455 } 456 } 457 458 static int cpuhp_down_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st, 459 enum cpuhp_state target) 460 { 461 enum cpuhp_state prev_state = st->state; 462 int ret = 0; 463 464 for (; st->state > target; st->state--) { 465 ret = cpuhp_invoke_callback(cpu, st->state, false, NULL); 466 if (ret) { 467 st->target = prev_state; 468 undo_cpu_down(cpu, st); 469 break; 470 } 471 } 472 return ret; 473 } 474 475 static void undo_cpu_up(unsigned int cpu, struct cpuhp_cpu_state *st) 476 { 477 for (st->state--; st->state > st->target; st->state--) { 478 struct cpuhp_step *step = cpuhp_get_step(st->state); 479 480 if (!step->skip_onerr) 481 cpuhp_invoke_callback(cpu, st->state, false, NULL); 482 } 483 } 484 485 static int cpuhp_up_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st, 486 enum cpuhp_state target) 487 { 488 enum cpuhp_state prev_state = st->state; 489 int ret = 0; 490 491 while (st->state < target) { 492 st->state++; 493 ret = cpuhp_invoke_callback(cpu, st->state, true, NULL); 494 if (ret) { 495 st->target = prev_state; 496 undo_cpu_up(cpu, st); 497 break; 498 } 499 } 500 return ret; 501 } 502 503 /* 504 * The cpu hotplug threads manage the bringup and teardown of the cpus 505 */ 506 static void cpuhp_create(unsigned int cpu) 507 { 508 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 509 510 init_completion(&st->done); 511 } 512 513 static int cpuhp_should_run(unsigned int cpu) 514 { 515 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 516 517 return st->should_run; 518 } 519 520 /* Execute the teardown callbacks. Used to be CPU_DOWN_PREPARE */ 521 static int cpuhp_ap_offline(unsigned int cpu, struct cpuhp_cpu_state *st) 522 { 523 enum cpuhp_state target = max((int)st->target, CPUHP_TEARDOWN_CPU); 524 525 return cpuhp_down_callbacks(cpu, st, target); 526 } 527 528 /* Execute the online startup callbacks. Used to be CPU_ONLINE */ 529 static int cpuhp_ap_online(unsigned int cpu, struct cpuhp_cpu_state *st) 530 { 531 return cpuhp_up_callbacks(cpu, st, st->target); 532 } 533 534 /* 535 * Execute teardown/startup callbacks on the plugged cpu. Also used to invoke 536 * callbacks when a state gets [un]installed at runtime. 537 */ 538 static void cpuhp_thread_fun(unsigned int cpu) 539 { 540 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 541 int ret = 0; 542 543 /* 544 * Paired with the mb() in cpuhp_kick_ap_work and 545 * cpuhp_invoke_ap_callback, so the work set is consistent visible. 546 */ 547 smp_mb(); 548 if (!st->should_run) 549 return; 550 551 st->should_run = false; 552 553 /* Single callback invocation for [un]install ? */ 554 if (st->single) { 555 if (st->cb_state < CPUHP_AP_ONLINE) { 556 local_irq_disable(); 557 ret = cpuhp_invoke_callback(cpu, st->cb_state, 558 st->bringup, st->node); 559 local_irq_enable(); 560 } else { 561 ret = cpuhp_invoke_callback(cpu, st->cb_state, 562 st->bringup, st->node); 563 } 564 } else if (st->rollback) { 565 BUG_ON(st->state < CPUHP_AP_ONLINE_IDLE); 566 567 undo_cpu_down(cpu, st); 568 /* 569 * This is a momentary workaround to keep the notifier users 570 * happy. Will go away once we got rid of the notifiers. 571 */ 572 cpu_notify_nofail(CPU_DOWN_FAILED, cpu); 573 st->rollback = false; 574 } else { 575 /* Cannot happen .... */ 576 BUG_ON(st->state < CPUHP_AP_ONLINE_IDLE); 577 578 /* Regular hotplug work */ 579 if (st->state < st->target) 580 ret = cpuhp_ap_online(cpu, st); 581 else if (st->state > st->target) 582 ret = cpuhp_ap_offline(cpu, st); 583 } 584 st->result = ret; 585 complete(&st->done); 586 } 587 588 /* Invoke a single callback on a remote cpu */ 589 static int 590 cpuhp_invoke_ap_callback(int cpu, enum cpuhp_state state, bool bringup, 591 struct hlist_node *node) 592 { 593 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 594 595 if (!cpu_online(cpu)) 596 return 0; 597 598 /* 599 * If we are up and running, use the hotplug thread. For early calls 600 * we invoke the thread function directly. 601 */ 602 if (!st->thread) 603 return cpuhp_invoke_callback(cpu, state, bringup, node); 604 605 st->cb_state = state; 606 st->single = true; 607 st->bringup = bringup; 608 st->node = node; 609 610 /* 611 * Make sure the above stores are visible before should_run becomes 612 * true. Paired with the mb() above in cpuhp_thread_fun() 613 */ 614 smp_mb(); 615 st->should_run = true; 616 wake_up_process(st->thread); 617 wait_for_completion(&st->done); 618 return st->result; 619 } 620 621 /* Regular hotplug invocation of the AP hotplug thread */ 622 static void __cpuhp_kick_ap_work(struct cpuhp_cpu_state *st) 623 { 624 st->result = 0; 625 st->single = false; 626 /* 627 * Make sure the above stores are visible before should_run becomes 628 * true. Paired with the mb() above in cpuhp_thread_fun() 629 */ 630 smp_mb(); 631 st->should_run = true; 632 wake_up_process(st->thread); 633 } 634 635 static int cpuhp_kick_ap_work(unsigned int cpu) 636 { 637 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 638 enum cpuhp_state state = st->state; 639 640 trace_cpuhp_enter(cpu, st->target, state, cpuhp_kick_ap_work); 641 __cpuhp_kick_ap_work(st); 642 wait_for_completion(&st->done); 643 trace_cpuhp_exit(cpu, st->state, state, st->result); 644 return st->result; 645 } 646 647 static struct smp_hotplug_thread cpuhp_threads = { 648 .store = &cpuhp_state.thread, 649 .create = &cpuhp_create, 650 .thread_should_run = cpuhp_should_run, 651 .thread_fn = cpuhp_thread_fun, 652 .thread_comm = "cpuhp/%u", 653 .selfparking = true, 654 }; 655 656 void __init cpuhp_threads_init(void) 657 { 658 BUG_ON(smpboot_register_percpu_thread(&cpuhp_threads)); 659 kthread_unpark(this_cpu_read(cpuhp_state.thread)); 660 } 661 662 #ifdef CONFIG_HOTPLUG_CPU 663 EXPORT_SYMBOL(register_cpu_notifier); 664 EXPORT_SYMBOL(__register_cpu_notifier); 665 void unregister_cpu_notifier(struct notifier_block *nb) 666 { 667 cpu_maps_update_begin(); 668 raw_notifier_chain_unregister(&cpu_chain, nb); 669 cpu_maps_update_done(); 670 } 671 EXPORT_SYMBOL(unregister_cpu_notifier); 672 673 void __unregister_cpu_notifier(struct notifier_block *nb) 674 { 675 raw_notifier_chain_unregister(&cpu_chain, nb); 676 } 677 EXPORT_SYMBOL(__unregister_cpu_notifier); 678 679 /** 680 * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU 681 * @cpu: a CPU id 682 * 683 * This function walks all processes, finds a valid mm struct for each one and 684 * then clears a corresponding bit in mm's cpumask. While this all sounds 685 * trivial, there are various non-obvious corner cases, which this function 686 * tries to solve in a safe manner. 687 * 688 * Also note that the function uses a somewhat relaxed locking scheme, so it may 689 * be called only for an already offlined CPU. 690 */ 691 void clear_tasks_mm_cpumask(int cpu) 692 { 693 struct task_struct *p; 694 695 /* 696 * This function is called after the cpu is taken down and marked 697 * offline, so its not like new tasks will ever get this cpu set in 698 * their mm mask. -- Peter Zijlstra 699 * Thus, we may use rcu_read_lock() here, instead of grabbing 700 * full-fledged tasklist_lock. 701 */ 702 WARN_ON(cpu_online(cpu)); 703 rcu_read_lock(); 704 for_each_process(p) { 705 struct task_struct *t; 706 707 /* 708 * Main thread might exit, but other threads may still have 709 * a valid mm. Find one. 710 */ 711 t = find_lock_task_mm(p); 712 if (!t) 713 continue; 714 cpumask_clear_cpu(cpu, mm_cpumask(t->mm)); 715 task_unlock(t); 716 } 717 rcu_read_unlock(); 718 } 719 720 static inline void check_for_tasks(int dead_cpu) 721 { 722 struct task_struct *g, *p; 723 724 read_lock(&tasklist_lock); 725 for_each_process_thread(g, p) { 726 if (!p->on_rq) 727 continue; 728 /* 729 * We do the check with unlocked task_rq(p)->lock. 730 * Order the reading to do not warn about a task, 731 * which was running on this cpu in the past, and 732 * it's just been woken on another cpu. 733 */ 734 rmb(); 735 if (task_cpu(p) != dead_cpu) 736 continue; 737 738 pr_warn("Task %s (pid=%d) is on cpu %d (state=%ld, flags=%x)\n", 739 p->comm, task_pid_nr(p), dead_cpu, p->state, p->flags); 740 } 741 read_unlock(&tasklist_lock); 742 } 743 744 static int notify_down_prepare(unsigned int cpu) 745 { 746 int err, nr_calls = 0; 747 748 err = __cpu_notify(CPU_DOWN_PREPARE, cpu, -1, &nr_calls); 749 if (err) { 750 nr_calls--; 751 __cpu_notify(CPU_DOWN_FAILED, cpu, nr_calls, NULL); 752 pr_warn("%s: attempt to take down CPU %u failed\n", 753 __func__, cpu); 754 } 755 return err; 756 } 757 758 /* Take this CPU down. */ 759 static int take_cpu_down(void *_param) 760 { 761 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 762 enum cpuhp_state target = max((int)st->target, CPUHP_AP_OFFLINE); 763 int err, cpu = smp_processor_id(); 764 765 /* Ensure this CPU doesn't handle any more interrupts. */ 766 err = __cpu_disable(); 767 if (err < 0) 768 return err; 769 770 /* 771 * We get here while we are in CPUHP_TEARDOWN_CPU state and we must not 772 * do this step again. 773 */ 774 WARN_ON(st->state != CPUHP_TEARDOWN_CPU); 775 st->state--; 776 /* Invoke the former CPU_DYING callbacks */ 777 for (; st->state > target; st->state--) 778 cpuhp_invoke_callback(cpu, st->state, false, NULL); 779 780 /* Give up timekeeping duties */ 781 tick_handover_do_timer(); 782 /* Park the stopper thread */ 783 stop_machine_park(cpu); 784 return 0; 785 } 786 787 static int takedown_cpu(unsigned int cpu) 788 { 789 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 790 int err; 791 792 /* Park the smpboot threads */ 793 kthread_park(per_cpu_ptr(&cpuhp_state, cpu)->thread); 794 smpboot_park_threads(cpu); 795 796 /* 797 * Prevent irq alloc/free while the dying cpu reorganizes the 798 * interrupt affinities. 799 */ 800 irq_lock_sparse(); 801 802 /* 803 * So now all preempt/rcu users must observe !cpu_active(). 804 */ 805 err = stop_machine(take_cpu_down, NULL, cpumask_of(cpu)); 806 if (err) { 807 /* CPU refused to die */ 808 irq_unlock_sparse(); 809 /* Unpark the hotplug thread so we can rollback there */ 810 kthread_unpark(per_cpu_ptr(&cpuhp_state, cpu)->thread); 811 return err; 812 } 813 BUG_ON(cpu_online(cpu)); 814 815 /* 816 * The CPUHP_AP_SCHED_MIGRATE_DYING callback will have removed all 817 * runnable tasks from the cpu, there's only the idle task left now 818 * that the migration thread is done doing the stop_machine thing. 819 * 820 * Wait for the stop thread to go away. 821 */ 822 wait_for_completion(&st->done); 823 BUG_ON(st->state != CPUHP_AP_IDLE_DEAD); 824 825 /* Interrupts are moved away from the dying cpu, reenable alloc/free */ 826 irq_unlock_sparse(); 827 828 hotplug_cpu__broadcast_tick_pull(cpu); 829 /* This actually kills the CPU. */ 830 __cpu_die(cpu); 831 832 tick_cleanup_dead_cpu(cpu); 833 return 0; 834 } 835 836 static int notify_dead(unsigned int cpu) 837 { 838 cpu_notify_nofail(CPU_DEAD, cpu); 839 check_for_tasks(cpu); 840 return 0; 841 } 842 843 static void cpuhp_complete_idle_dead(void *arg) 844 { 845 struct cpuhp_cpu_state *st = arg; 846 847 complete(&st->done); 848 } 849 850 void cpuhp_report_idle_dead(void) 851 { 852 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 853 854 BUG_ON(st->state != CPUHP_AP_OFFLINE); 855 rcu_report_dead(smp_processor_id()); 856 st->state = CPUHP_AP_IDLE_DEAD; 857 /* 858 * We cannot call complete after rcu_report_dead() so we delegate it 859 * to an online cpu. 860 */ 861 smp_call_function_single(cpumask_first(cpu_online_mask), 862 cpuhp_complete_idle_dead, st, 0); 863 } 864 865 #else 866 #define notify_down_prepare NULL 867 #define takedown_cpu NULL 868 #define notify_dead NULL 869 #endif 870 871 #ifdef CONFIG_HOTPLUG_CPU 872 873 /* Requires cpu_add_remove_lock to be held */ 874 static int __ref _cpu_down(unsigned int cpu, int tasks_frozen, 875 enum cpuhp_state target) 876 { 877 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 878 int prev_state, ret = 0; 879 bool hasdied = false; 880 881 if (num_online_cpus() == 1) 882 return -EBUSY; 883 884 if (!cpu_present(cpu)) 885 return -EINVAL; 886 887 cpu_hotplug_begin(); 888 889 cpuhp_tasks_frozen = tasks_frozen; 890 891 prev_state = st->state; 892 st->target = target; 893 /* 894 * If the current CPU state is in the range of the AP hotplug thread, 895 * then we need to kick the thread. 896 */ 897 if (st->state > CPUHP_TEARDOWN_CPU) { 898 ret = cpuhp_kick_ap_work(cpu); 899 /* 900 * The AP side has done the error rollback already. Just 901 * return the error code.. 902 */ 903 if (ret) 904 goto out; 905 906 /* 907 * We might have stopped still in the range of the AP hotplug 908 * thread. Nothing to do anymore. 909 */ 910 if (st->state > CPUHP_TEARDOWN_CPU) 911 goto out; 912 } 913 /* 914 * The AP brought itself down to CPUHP_TEARDOWN_CPU. So we need 915 * to do the further cleanups. 916 */ 917 ret = cpuhp_down_callbacks(cpu, st, target); 918 if (ret && st->state > CPUHP_TEARDOWN_CPU && st->state < prev_state) { 919 st->target = prev_state; 920 st->rollback = true; 921 cpuhp_kick_ap_work(cpu); 922 } 923 924 hasdied = prev_state != st->state && st->state == CPUHP_OFFLINE; 925 out: 926 cpu_hotplug_done(); 927 /* This post dead nonsense must die */ 928 if (!ret && hasdied) 929 cpu_notify_nofail(CPU_POST_DEAD, cpu); 930 return ret; 931 } 932 933 static int do_cpu_down(unsigned int cpu, enum cpuhp_state target) 934 { 935 int err; 936 937 cpu_maps_update_begin(); 938 939 if (cpu_hotplug_disabled) { 940 err = -EBUSY; 941 goto out; 942 } 943 944 err = _cpu_down(cpu, 0, target); 945 946 out: 947 cpu_maps_update_done(); 948 return err; 949 } 950 int cpu_down(unsigned int cpu) 951 { 952 return do_cpu_down(cpu, CPUHP_OFFLINE); 953 } 954 EXPORT_SYMBOL(cpu_down); 955 #endif /*CONFIG_HOTPLUG_CPU*/ 956 957 /** 958 * notify_cpu_starting(cpu) - Invoke the callbacks on the starting CPU 959 * @cpu: cpu that just started 960 * 961 * It must be called by the arch code on the new cpu, before the new cpu 962 * enables interrupts and before the "boot" cpu returns from __cpu_up(). 963 */ 964 void notify_cpu_starting(unsigned int cpu) 965 { 966 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 967 enum cpuhp_state target = min((int)st->target, CPUHP_AP_ONLINE); 968 969 rcu_cpu_starting(cpu); /* Enables RCU usage on this CPU. */ 970 while (st->state < target) { 971 st->state++; 972 cpuhp_invoke_callback(cpu, st->state, true, NULL); 973 } 974 } 975 976 /* 977 * Called from the idle task. We need to set active here, so we can kick off 978 * the stopper thread and unpark the smpboot threads. If the target state is 979 * beyond CPUHP_AP_ONLINE_IDLE we kick cpuhp thread and let it bring up the 980 * cpu further. 981 */ 982 void cpuhp_online_idle(enum cpuhp_state state) 983 { 984 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 985 unsigned int cpu = smp_processor_id(); 986 987 /* Happens for the boot cpu */ 988 if (state != CPUHP_AP_ONLINE_IDLE) 989 return; 990 991 st->state = CPUHP_AP_ONLINE_IDLE; 992 993 /* Unpark the stopper thread and the hotplug thread of this cpu */ 994 stop_machine_unpark(cpu); 995 kthread_unpark(st->thread); 996 997 /* Should we go further up ? */ 998 if (st->target > CPUHP_AP_ONLINE_IDLE) 999 __cpuhp_kick_ap_work(st); 1000 else 1001 complete(&st->done); 1002 } 1003 1004 /* Requires cpu_add_remove_lock to be held */ 1005 static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target) 1006 { 1007 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1008 struct task_struct *idle; 1009 int ret = 0; 1010 1011 cpu_hotplug_begin(); 1012 1013 if (!cpu_present(cpu)) { 1014 ret = -EINVAL; 1015 goto out; 1016 } 1017 1018 /* 1019 * The caller of do_cpu_up might have raced with another 1020 * caller. Ignore it for now. 1021 */ 1022 if (st->state >= target) 1023 goto out; 1024 1025 if (st->state == CPUHP_OFFLINE) { 1026 /* Let it fail before we try to bring the cpu up */ 1027 idle = idle_thread_get(cpu); 1028 if (IS_ERR(idle)) { 1029 ret = PTR_ERR(idle); 1030 goto out; 1031 } 1032 } 1033 1034 cpuhp_tasks_frozen = tasks_frozen; 1035 1036 st->target = target; 1037 /* 1038 * If the current CPU state is in the range of the AP hotplug thread, 1039 * then we need to kick the thread once more. 1040 */ 1041 if (st->state > CPUHP_BRINGUP_CPU) { 1042 ret = cpuhp_kick_ap_work(cpu); 1043 /* 1044 * The AP side has done the error rollback already. Just 1045 * return the error code.. 1046 */ 1047 if (ret) 1048 goto out; 1049 } 1050 1051 /* 1052 * Try to reach the target state. We max out on the BP at 1053 * CPUHP_BRINGUP_CPU. After that the AP hotplug thread is 1054 * responsible for bringing it up to the target state. 1055 */ 1056 target = min((int)target, CPUHP_BRINGUP_CPU); 1057 ret = cpuhp_up_callbacks(cpu, st, target); 1058 out: 1059 cpu_hotplug_done(); 1060 return ret; 1061 } 1062 1063 static int do_cpu_up(unsigned int cpu, enum cpuhp_state target) 1064 { 1065 int err = 0; 1066 1067 if (!cpu_possible(cpu)) { 1068 pr_err("can't online cpu %d because it is not configured as may-hotadd at boot time\n", 1069 cpu); 1070 #if defined(CONFIG_IA64) 1071 pr_err("please check additional_cpus= boot parameter\n"); 1072 #endif 1073 return -EINVAL; 1074 } 1075 1076 err = try_online_node(cpu_to_node(cpu)); 1077 if (err) 1078 return err; 1079 1080 cpu_maps_update_begin(); 1081 1082 if (cpu_hotplug_disabled) { 1083 err = -EBUSY; 1084 goto out; 1085 } 1086 1087 err = _cpu_up(cpu, 0, target); 1088 out: 1089 cpu_maps_update_done(); 1090 return err; 1091 } 1092 1093 int cpu_up(unsigned int cpu) 1094 { 1095 return do_cpu_up(cpu, CPUHP_ONLINE); 1096 } 1097 EXPORT_SYMBOL_GPL(cpu_up); 1098 1099 #ifdef CONFIG_PM_SLEEP_SMP 1100 static cpumask_var_t frozen_cpus; 1101 1102 int freeze_secondary_cpus(int primary) 1103 { 1104 int cpu, error = 0; 1105 1106 cpu_maps_update_begin(); 1107 if (!cpu_online(primary)) 1108 primary = cpumask_first(cpu_online_mask); 1109 /* 1110 * We take down all of the non-boot CPUs in one shot to avoid races 1111 * with the userspace trying to use the CPU hotplug at the same time 1112 */ 1113 cpumask_clear(frozen_cpus); 1114 1115 pr_info("Disabling non-boot CPUs ...\n"); 1116 for_each_online_cpu(cpu) { 1117 if (cpu == primary) 1118 continue; 1119 trace_suspend_resume(TPS("CPU_OFF"), cpu, true); 1120 error = _cpu_down(cpu, 1, CPUHP_OFFLINE); 1121 trace_suspend_resume(TPS("CPU_OFF"), cpu, false); 1122 if (!error) 1123 cpumask_set_cpu(cpu, frozen_cpus); 1124 else { 1125 pr_err("Error taking CPU%d down: %d\n", cpu, error); 1126 break; 1127 } 1128 } 1129 1130 if (!error) 1131 BUG_ON(num_online_cpus() > 1); 1132 else 1133 pr_err("Non-boot CPUs are not disabled\n"); 1134 1135 /* 1136 * Make sure the CPUs won't be enabled by someone else. We need to do 1137 * this even in case of failure as all disable_nonboot_cpus() users are 1138 * supposed to do enable_nonboot_cpus() on the failure path. 1139 */ 1140 cpu_hotplug_disabled++; 1141 1142 cpu_maps_update_done(); 1143 return error; 1144 } 1145 1146 void __weak arch_enable_nonboot_cpus_begin(void) 1147 { 1148 } 1149 1150 void __weak arch_enable_nonboot_cpus_end(void) 1151 { 1152 } 1153 1154 void enable_nonboot_cpus(void) 1155 { 1156 int cpu, error; 1157 1158 /* Allow everyone to use the CPU hotplug again */ 1159 cpu_maps_update_begin(); 1160 __cpu_hotplug_enable(); 1161 if (cpumask_empty(frozen_cpus)) 1162 goto out; 1163 1164 pr_info("Enabling non-boot CPUs ...\n"); 1165 1166 arch_enable_nonboot_cpus_begin(); 1167 1168 for_each_cpu(cpu, frozen_cpus) { 1169 trace_suspend_resume(TPS("CPU_ON"), cpu, true); 1170 error = _cpu_up(cpu, 1, CPUHP_ONLINE); 1171 trace_suspend_resume(TPS("CPU_ON"), cpu, false); 1172 if (!error) { 1173 pr_info("CPU%d is up\n", cpu); 1174 continue; 1175 } 1176 pr_warn("Error taking CPU%d up: %d\n", cpu, error); 1177 } 1178 1179 arch_enable_nonboot_cpus_end(); 1180 1181 cpumask_clear(frozen_cpus); 1182 out: 1183 cpu_maps_update_done(); 1184 } 1185 1186 static int __init alloc_frozen_cpus(void) 1187 { 1188 if (!alloc_cpumask_var(&frozen_cpus, GFP_KERNEL|__GFP_ZERO)) 1189 return -ENOMEM; 1190 return 0; 1191 } 1192 core_initcall(alloc_frozen_cpus); 1193 1194 /* 1195 * When callbacks for CPU hotplug notifications are being executed, we must 1196 * ensure that the state of the system with respect to the tasks being frozen 1197 * or not, as reported by the notification, remains unchanged *throughout the 1198 * duration* of the execution of the callbacks. 1199 * Hence we need to prevent the freezer from racing with regular CPU hotplug. 1200 * 1201 * This synchronization is implemented by mutually excluding regular CPU 1202 * hotplug and Suspend/Hibernate call paths by hooking onto the Suspend/ 1203 * Hibernate notifications. 1204 */ 1205 static int 1206 cpu_hotplug_pm_callback(struct notifier_block *nb, 1207 unsigned long action, void *ptr) 1208 { 1209 switch (action) { 1210 1211 case PM_SUSPEND_PREPARE: 1212 case PM_HIBERNATION_PREPARE: 1213 cpu_hotplug_disable(); 1214 break; 1215 1216 case PM_POST_SUSPEND: 1217 case PM_POST_HIBERNATION: 1218 cpu_hotplug_enable(); 1219 break; 1220 1221 default: 1222 return NOTIFY_DONE; 1223 } 1224 1225 return NOTIFY_OK; 1226 } 1227 1228 1229 static int __init cpu_hotplug_pm_sync_init(void) 1230 { 1231 /* 1232 * cpu_hotplug_pm_callback has higher priority than x86 1233 * bsp_pm_callback which depends on cpu_hotplug_pm_callback 1234 * to disable cpu hotplug to avoid cpu hotplug race. 1235 */ 1236 pm_notifier(cpu_hotplug_pm_callback, 0); 1237 return 0; 1238 } 1239 core_initcall(cpu_hotplug_pm_sync_init); 1240 1241 #endif /* CONFIG_PM_SLEEP_SMP */ 1242 1243 #endif /* CONFIG_SMP */ 1244 1245 /* Boot processor state steps */ 1246 static struct cpuhp_step cpuhp_bp_states[] = { 1247 [CPUHP_OFFLINE] = { 1248 .name = "offline", 1249 .startup.single = NULL, 1250 .teardown.single = NULL, 1251 }, 1252 #ifdef CONFIG_SMP 1253 [CPUHP_CREATE_THREADS]= { 1254 .name = "threads:prepare", 1255 .startup.single = smpboot_create_threads, 1256 .teardown.single = NULL, 1257 .cant_stop = true, 1258 }, 1259 [CPUHP_PERF_PREPARE] = { 1260 .name = "perf:prepare", 1261 .startup.single = perf_event_init_cpu, 1262 .teardown.single = perf_event_exit_cpu, 1263 }, 1264 [CPUHP_WORKQUEUE_PREP] = { 1265 .name = "workqueue:prepare", 1266 .startup.single = workqueue_prepare_cpu, 1267 .teardown.single = NULL, 1268 }, 1269 [CPUHP_HRTIMERS_PREPARE] = { 1270 .name = "hrtimers:prepare", 1271 .startup.single = hrtimers_prepare_cpu, 1272 .teardown.single = hrtimers_dead_cpu, 1273 }, 1274 [CPUHP_SMPCFD_PREPARE] = { 1275 .name = "smpcfd:prepare", 1276 .startup.single = smpcfd_prepare_cpu, 1277 .teardown.single = smpcfd_dead_cpu, 1278 }, 1279 [CPUHP_RELAY_PREPARE] = { 1280 .name = "relay:prepare", 1281 .startup.single = relay_prepare_cpu, 1282 .teardown.single = NULL, 1283 }, 1284 [CPUHP_SLAB_PREPARE] = { 1285 .name = "slab:prepare", 1286 .startup.single = slab_prepare_cpu, 1287 .teardown.single = slab_dead_cpu, 1288 }, 1289 [CPUHP_RCUTREE_PREP] = { 1290 .name = "RCU/tree:prepare", 1291 .startup.single = rcutree_prepare_cpu, 1292 .teardown.single = rcutree_dead_cpu, 1293 }, 1294 /* 1295 * Preparatory and dead notifiers. Will be replaced once the notifiers 1296 * are converted to states. 1297 */ 1298 [CPUHP_NOTIFY_PREPARE] = { 1299 .name = "notify:prepare", 1300 .startup.single = notify_prepare, 1301 .teardown.single = notify_dead, 1302 .skip_onerr = true, 1303 .cant_stop = true, 1304 }, 1305 /* 1306 * On the tear-down path, timers_dead_cpu() must be invoked 1307 * before blk_mq_queue_reinit_notify() from notify_dead(), 1308 * otherwise a RCU stall occurs. 1309 */ 1310 [CPUHP_TIMERS_DEAD] = { 1311 .name = "timers:dead", 1312 .startup.single = NULL, 1313 .teardown.single = timers_dead_cpu, 1314 }, 1315 /* Kicks the plugged cpu into life */ 1316 [CPUHP_BRINGUP_CPU] = { 1317 .name = "cpu:bringup", 1318 .startup.single = bringup_cpu, 1319 .teardown.single = NULL, 1320 .cant_stop = true, 1321 }, 1322 [CPUHP_AP_SMPCFD_DYING] = { 1323 .name = "smpcfd:dying", 1324 .startup.single = NULL, 1325 .teardown.single = smpcfd_dying_cpu, 1326 }, 1327 /* 1328 * Handled on controll processor until the plugged processor manages 1329 * this itself. 1330 */ 1331 [CPUHP_TEARDOWN_CPU] = { 1332 .name = "cpu:teardown", 1333 .startup.single = NULL, 1334 .teardown.single = takedown_cpu, 1335 .cant_stop = true, 1336 }, 1337 #else 1338 [CPUHP_BRINGUP_CPU] = { }, 1339 #endif 1340 }; 1341 1342 /* Application processor state steps */ 1343 static struct cpuhp_step cpuhp_ap_states[] = { 1344 #ifdef CONFIG_SMP 1345 /* Final state before CPU kills itself */ 1346 [CPUHP_AP_IDLE_DEAD] = { 1347 .name = "idle:dead", 1348 }, 1349 /* 1350 * Last state before CPU enters the idle loop to die. Transient state 1351 * for synchronization. 1352 */ 1353 [CPUHP_AP_OFFLINE] = { 1354 .name = "ap:offline", 1355 .cant_stop = true, 1356 }, 1357 /* First state is scheduler control. Interrupts are disabled */ 1358 [CPUHP_AP_SCHED_STARTING] = { 1359 .name = "sched:starting", 1360 .startup.single = sched_cpu_starting, 1361 .teardown.single = sched_cpu_dying, 1362 }, 1363 [CPUHP_AP_RCUTREE_DYING] = { 1364 .name = "RCU/tree:dying", 1365 .startup.single = NULL, 1366 .teardown.single = rcutree_dying_cpu, 1367 }, 1368 /* Entry state on starting. Interrupts enabled from here on. Transient 1369 * state for synchronsization */ 1370 [CPUHP_AP_ONLINE] = { 1371 .name = "ap:online", 1372 }, 1373 /* Handle smpboot threads park/unpark */ 1374 [CPUHP_AP_SMPBOOT_THREADS] = { 1375 .name = "smpboot/threads:online", 1376 .startup.single = smpboot_unpark_threads, 1377 .teardown.single = NULL, 1378 }, 1379 [CPUHP_AP_PERF_ONLINE] = { 1380 .name = "perf:online", 1381 .startup.single = perf_event_init_cpu, 1382 .teardown.single = perf_event_exit_cpu, 1383 }, 1384 [CPUHP_AP_WORKQUEUE_ONLINE] = { 1385 .name = "workqueue:online", 1386 .startup.single = workqueue_online_cpu, 1387 .teardown.single = workqueue_offline_cpu, 1388 }, 1389 [CPUHP_AP_RCUTREE_ONLINE] = { 1390 .name = "RCU/tree:online", 1391 .startup.single = rcutree_online_cpu, 1392 .teardown.single = rcutree_offline_cpu, 1393 }, 1394 1395 /* 1396 * Online/down_prepare notifiers. Will be removed once the notifiers 1397 * are converted to states. 1398 */ 1399 [CPUHP_AP_NOTIFY_ONLINE] = { 1400 .name = "notify:online", 1401 .startup.single = notify_online, 1402 .teardown.single = notify_down_prepare, 1403 .skip_onerr = true, 1404 }, 1405 #endif 1406 /* 1407 * The dynamically registered state space is here 1408 */ 1409 1410 #ifdef CONFIG_SMP 1411 /* Last state is scheduler control setting the cpu active */ 1412 [CPUHP_AP_ACTIVE] = { 1413 .name = "sched:active", 1414 .startup.single = sched_cpu_activate, 1415 .teardown.single = sched_cpu_deactivate, 1416 }, 1417 #endif 1418 1419 /* CPU is fully up and running. */ 1420 [CPUHP_ONLINE] = { 1421 .name = "online", 1422 .startup.single = NULL, 1423 .teardown.single = NULL, 1424 }, 1425 }; 1426 1427 /* Sanity check for callbacks */ 1428 static int cpuhp_cb_check(enum cpuhp_state state) 1429 { 1430 if (state <= CPUHP_OFFLINE || state >= CPUHP_ONLINE) 1431 return -EINVAL; 1432 return 0; 1433 } 1434 1435 static void cpuhp_store_callbacks(enum cpuhp_state state, 1436 const char *name, 1437 int (*startup)(unsigned int cpu), 1438 int (*teardown)(unsigned int cpu), 1439 bool multi_instance) 1440 { 1441 /* (Un)Install the callbacks for further cpu hotplug operations */ 1442 struct cpuhp_step *sp; 1443 1444 mutex_lock(&cpuhp_state_mutex); 1445 sp = cpuhp_get_step(state); 1446 sp->startup.single = startup; 1447 sp->teardown.single = teardown; 1448 sp->name = name; 1449 sp->multi_instance = multi_instance; 1450 INIT_HLIST_HEAD(&sp->list); 1451 mutex_unlock(&cpuhp_state_mutex); 1452 } 1453 1454 static void *cpuhp_get_teardown_cb(enum cpuhp_state state) 1455 { 1456 return cpuhp_get_step(state)->teardown.single; 1457 } 1458 1459 /* 1460 * Call the startup/teardown function for a step either on the AP or 1461 * on the current CPU. 1462 */ 1463 static int cpuhp_issue_call(int cpu, enum cpuhp_state state, bool bringup, 1464 struct hlist_node *node) 1465 { 1466 struct cpuhp_step *sp = cpuhp_get_step(state); 1467 int ret; 1468 1469 if ((bringup && !sp->startup.single) || 1470 (!bringup && !sp->teardown.single)) 1471 return 0; 1472 /* 1473 * The non AP bound callbacks can fail on bringup. On teardown 1474 * e.g. module removal we crash for now. 1475 */ 1476 #ifdef CONFIG_SMP 1477 if (cpuhp_is_ap_state(state)) 1478 ret = cpuhp_invoke_ap_callback(cpu, state, bringup, node); 1479 else 1480 ret = cpuhp_invoke_callback(cpu, state, bringup, node); 1481 #else 1482 ret = cpuhp_invoke_callback(cpu, state, bringup, node); 1483 #endif 1484 BUG_ON(ret && !bringup); 1485 return ret; 1486 } 1487 1488 /* 1489 * Called from __cpuhp_setup_state on a recoverable failure. 1490 * 1491 * Note: The teardown callbacks for rollback are not allowed to fail! 1492 */ 1493 static void cpuhp_rollback_install(int failedcpu, enum cpuhp_state state, 1494 struct hlist_node *node) 1495 { 1496 int cpu; 1497 1498 /* Roll back the already executed steps on the other cpus */ 1499 for_each_present_cpu(cpu) { 1500 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1501 int cpustate = st->state; 1502 1503 if (cpu >= failedcpu) 1504 break; 1505 1506 /* Did we invoke the startup call on that cpu ? */ 1507 if (cpustate >= state) 1508 cpuhp_issue_call(cpu, state, false, node); 1509 } 1510 } 1511 1512 /* 1513 * Returns a free for dynamic slot assignment of the Online state. The states 1514 * are protected by the cpuhp_slot_states mutex and an empty slot is identified 1515 * by having no name assigned. 1516 */ 1517 static int cpuhp_reserve_state(enum cpuhp_state state) 1518 { 1519 enum cpuhp_state i; 1520 1521 mutex_lock(&cpuhp_state_mutex); 1522 for (i = CPUHP_AP_ONLINE_DYN; i <= CPUHP_AP_ONLINE_DYN_END; i++) { 1523 if (cpuhp_ap_states[i].name) 1524 continue; 1525 1526 cpuhp_ap_states[i].name = "Reserved"; 1527 mutex_unlock(&cpuhp_state_mutex); 1528 return i; 1529 } 1530 mutex_unlock(&cpuhp_state_mutex); 1531 WARN(1, "No more dynamic states available for CPU hotplug\n"); 1532 return -ENOSPC; 1533 } 1534 1535 int __cpuhp_state_add_instance(enum cpuhp_state state, struct hlist_node *node, 1536 bool invoke) 1537 { 1538 struct cpuhp_step *sp; 1539 int cpu; 1540 int ret; 1541 1542 sp = cpuhp_get_step(state); 1543 if (sp->multi_instance == false) 1544 return -EINVAL; 1545 1546 get_online_cpus(); 1547 1548 if (!invoke || !sp->startup.multi) 1549 goto add_node; 1550 1551 /* 1552 * Try to call the startup callback for each present cpu 1553 * depending on the hotplug state of the cpu. 1554 */ 1555 for_each_present_cpu(cpu) { 1556 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1557 int cpustate = st->state; 1558 1559 if (cpustate < state) 1560 continue; 1561 1562 ret = cpuhp_issue_call(cpu, state, true, node); 1563 if (ret) { 1564 if (sp->teardown.multi) 1565 cpuhp_rollback_install(cpu, state, node); 1566 goto err; 1567 } 1568 } 1569 add_node: 1570 ret = 0; 1571 mutex_lock(&cpuhp_state_mutex); 1572 hlist_add_head(node, &sp->list); 1573 mutex_unlock(&cpuhp_state_mutex); 1574 1575 err: 1576 put_online_cpus(); 1577 return ret; 1578 } 1579 EXPORT_SYMBOL_GPL(__cpuhp_state_add_instance); 1580 1581 /** 1582 * __cpuhp_setup_state - Setup the callbacks for an hotplug machine state 1583 * @state: The state to setup 1584 * @invoke: If true, the startup function is invoked for cpus where 1585 * cpu state >= @state 1586 * @startup: startup callback function 1587 * @teardown: teardown callback function 1588 * 1589 * Returns 0 if successful, otherwise a proper error code 1590 */ 1591 int __cpuhp_setup_state(enum cpuhp_state state, 1592 const char *name, bool invoke, 1593 int (*startup)(unsigned int cpu), 1594 int (*teardown)(unsigned int cpu), 1595 bool multi_instance) 1596 { 1597 int cpu, ret = 0; 1598 int dyn_state = 0; 1599 1600 if (cpuhp_cb_check(state) || !name) 1601 return -EINVAL; 1602 1603 get_online_cpus(); 1604 1605 /* currently assignments for the ONLINE state are possible */ 1606 if (state == CPUHP_AP_ONLINE_DYN) { 1607 dyn_state = 1; 1608 ret = cpuhp_reserve_state(state); 1609 if (ret < 0) 1610 goto out; 1611 state = ret; 1612 } 1613 1614 cpuhp_store_callbacks(state, name, startup, teardown, multi_instance); 1615 1616 if (!invoke || !startup) 1617 goto out; 1618 1619 /* 1620 * Try to call the startup callback for each present cpu 1621 * depending on the hotplug state of the cpu. 1622 */ 1623 for_each_present_cpu(cpu) { 1624 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1625 int cpustate = st->state; 1626 1627 if (cpustate < state) 1628 continue; 1629 1630 ret = cpuhp_issue_call(cpu, state, true, NULL); 1631 if (ret) { 1632 if (teardown) 1633 cpuhp_rollback_install(cpu, state, NULL); 1634 cpuhp_store_callbacks(state, NULL, NULL, NULL, false); 1635 goto out; 1636 } 1637 } 1638 out: 1639 put_online_cpus(); 1640 if (!ret && dyn_state) 1641 return state; 1642 return ret; 1643 } 1644 EXPORT_SYMBOL(__cpuhp_setup_state); 1645 1646 int __cpuhp_state_remove_instance(enum cpuhp_state state, 1647 struct hlist_node *node, bool invoke) 1648 { 1649 struct cpuhp_step *sp = cpuhp_get_step(state); 1650 int cpu; 1651 1652 BUG_ON(cpuhp_cb_check(state)); 1653 1654 if (!sp->multi_instance) 1655 return -EINVAL; 1656 1657 get_online_cpus(); 1658 if (!invoke || !cpuhp_get_teardown_cb(state)) 1659 goto remove; 1660 /* 1661 * Call the teardown callback for each present cpu depending 1662 * on the hotplug state of the cpu. This function is not 1663 * allowed to fail currently! 1664 */ 1665 for_each_present_cpu(cpu) { 1666 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1667 int cpustate = st->state; 1668 1669 if (cpustate >= state) 1670 cpuhp_issue_call(cpu, state, false, node); 1671 } 1672 1673 remove: 1674 mutex_lock(&cpuhp_state_mutex); 1675 hlist_del(node); 1676 mutex_unlock(&cpuhp_state_mutex); 1677 put_online_cpus(); 1678 1679 return 0; 1680 } 1681 EXPORT_SYMBOL_GPL(__cpuhp_state_remove_instance); 1682 /** 1683 * __cpuhp_remove_state - Remove the callbacks for an hotplug machine state 1684 * @state: The state to remove 1685 * @invoke: If true, the teardown function is invoked for cpus where 1686 * cpu state >= @state 1687 * 1688 * The teardown callback is currently not allowed to fail. Think 1689 * about module removal! 1690 */ 1691 void __cpuhp_remove_state(enum cpuhp_state state, bool invoke) 1692 { 1693 struct cpuhp_step *sp = cpuhp_get_step(state); 1694 int cpu; 1695 1696 BUG_ON(cpuhp_cb_check(state)); 1697 1698 get_online_cpus(); 1699 1700 if (sp->multi_instance) { 1701 WARN(!hlist_empty(&sp->list), 1702 "Error: Removing state %d which has instances left.\n", 1703 state); 1704 goto remove; 1705 } 1706 1707 if (!invoke || !cpuhp_get_teardown_cb(state)) 1708 goto remove; 1709 1710 /* 1711 * Call the teardown callback for each present cpu depending 1712 * on the hotplug state of the cpu. This function is not 1713 * allowed to fail currently! 1714 */ 1715 for_each_present_cpu(cpu) { 1716 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1717 int cpustate = st->state; 1718 1719 if (cpustate >= state) 1720 cpuhp_issue_call(cpu, state, false, NULL); 1721 } 1722 remove: 1723 cpuhp_store_callbacks(state, NULL, NULL, NULL, false); 1724 put_online_cpus(); 1725 } 1726 EXPORT_SYMBOL(__cpuhp_remove_state); 1727 1728 #if defined(CONFIG_SYSFS) && defined(CONFIG_HOTPLUG_CPU) 1729 static ssize_t show_cpuhp_state(struct device *dev, 1730 struct device_attribute *attr, char *buf) 1731 { 1732 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1733 1734 return sprintf(buf, "%d\n", st->state); 1735 } 1736 static DEVICE_ATTR(state, 0444, show_cpuhp_state, NULL); 1737 1738 static ssize_t write_cpuhp_target(struct device *dev, 1739 struct device_attribute *attr, 1740 const char *buf, size_t count) 1741 { 1742 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1743 struct cpuhp_step *sp; 1744 int target, ret; 1745 1746 ret = kstrtoint(buf, 10, &target); 1747 if (ret) 1748 return ret; 1749 1750 #ifdef CONFIG_CPU_HOTPLUG_STATE_CONTROL 1751 if (target < CPUHP_OFFLINE || target > CPUHP_ONLINE) 1752 return -EINVAL; 1753 #else 1754 if (target != CPUHP_OFFLINE && target != CPUHP_ONLINE) 1755 return -EINVAL; 1756 #endif 1757 1758 ret = lock_device_hotplug_sysfs(); 1759 if (ret) 1760 return ret; 1761 1762 mutex_lock(&cpuhp_state_mutex); 1763 sp = cpuhp_get_step(target); 1764 ret = !sp->name || sp->cant_stop ? -EINVAL : 0; 1765 mutex_unlock(&cpuhp_state_mutex); 1766 if (ret) 1767 return ret; 1768 1769 if (st->state < target) 1770 ret = do_cpu_up(dev->id, target); 1771 else 1772 ret = do_cpu_down(dev->id, target); 1773 1774 unlock_device_hotplug(); 1775 return ret ? ret : count; 1776 } 1777 1778 static ssize_t show_cpuhp_target(struct device *dev, 1779 struct device_attribute *attr, char *buf) 1780 { 1781 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1782 1783 return sprintf(buf, "%d\n", st->target); 1784 } 1785 static DEVICE_ATTR(target, 0644, show_cpuhp_target, write_cpuhp_target); 1786 1787 static struct attribute *cpuhp_cpu_attrs[] = { 1788 &dev_attr_state.attr, 1789 &dev_attr_target.attr, 1790 NULL 1791 }; 1792 1793 static struct attribute_group cpuhp_cpu_attr_group = { 1794 .attrs = cpuhp_cpu_attrs, 1795 .name = "hotplug", 1796 NULL 1797 }; 1798 1799 static ssize_t show_cpuhp_states(struct device *dev, 1800 struct device_attribute *attr, char *buf) 1801 { 1802 ssize_t cur, res = 0; 1803 int i; 1804 1805 mutex_lock(&cpuhp_state_mutex); 1806 for (i = CPUHP_OFFLINE; i <= CPUHP_ONLINE; i++) { 1807 struct cpuhp_step *sp = cpuhp_get_step(i); 1808 1809 if (sp->name) { 1810 cur = sprintf(buf, "%3d: %s\n", i, sp->name); 1811 buf += cur; 1812 res += cur; 1813 } 1814 } 1815 mutex_unlock(&cpuhp_state_mutex); 1816 return res; 1817 } 1818 static DEVICE_ATTR(states, 0444, show_cpuhp_states, NULL); 1819 1820 static struct attribute *cpuhp_cpu_root_attrs[] = { 1821 &dev_attr_states.attr, 1822 NULL 1823 }; 1824 1825 static struct attribute_group cpuhp_cpu_root_attr_group = { 1826 .attrs = cpuhp_cpu_root_attrs, 1827 .name = "hotplug", 1828 NULL 1829 }; 1830 1831 static int __init cpuhp_sysfs_init(void) 1832 { 1833 int cpu, ret; 1834 1835 ret = sysfs_create_group(&cpu_subsys.dev_root->kobj, 1836 &cpuhp_cpu_root_attr_group); 1837 if (ret) 1838 return ret; 1839 1840 for_each_possible_cpu(cpu) { 1841 struct device *dev = get_cpu_device(cpu); 1842 1843 if (!dev) 1844 continue; 1845 ret = sysfs_create_group(&dev->kobj, &cpuhp_cpu_attr_group); 1846 if (ret) 1847 return ret; 1848 } 1849 return 0; 1850 } 1851 device_initcall(cpuhp_sysfs_init); 1852 #endif 1853 1854 /* 1855 * cpu_bit_bitmap[] is a special, "compressed" data structure that 1856 * represents all NR_CPUS bits binary values of 1<<nr. 1857 * 1858 * It is used by cpumask_of() to get a constant address to a CPU 1859 * mask value that has a single bit set only. 1860 */ 1861 1862 /* cpu_bit_bitmap[0] is empty - so we can back into it */ 1863 #define MASK_DECLARE_1(x) [x+1][0] = (1UL << (x)) 1864 #define MASK_DECLARE_2(x) MASK_DECLARE_1(x), MASK_DECLARE_1(x+1) 1865 #define MASK_DECLARE_4(x) MASK_DECLARE_2(x), MASK_DECLARE_2(x+2) 1866 #define MASK_DECLARE_8(x) MASK_DECLARE_4(x), MASK_DECLARE_4(x+4) 1867 1868 const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)] = { 1869 1870 MASK_DECLARE_8(0), MASK_DECLARE_8(8), 1871 MASK_DECLARE_8(16), MASK_DECLARE_8(24), 1872 #if BITS_PER_LONG > 32 1873 MASK_DECLARE_8(32), MASK_DECLARE_8(40), 1874 MASK_DECLARE_8(48), MASK_DECLARE_8(56), 1875 #endif 1876 }; 1877 EXPORT_SYMBOL_GPL(cpu_bit_bitmap); 1878 1879 const DECLARE_BITMAP(cpu_all_bits, NR_CPUS) = CPU_BITS_ALL; 1880 EXPORT_SYMBOL(cpu_all_bits); 1881 1882 #ifdef CONFIG_INIT_ALL_POSSIBLE 1883 struct cpumask __cpu_possible_mask __read_mostly 1884 = {CPU_BITS_ALL}; 1885 #else 1886 struct cpumask __cpu_possible_mask __read_mostly; 1887 #endif 1888 EXPORT_SYMBOL(__cpu_possible_mask); 1889 1890 struct cpumask __cpu_online_mask __read_mostly; 1891 EXPORT_SYMBOL(__cpu_online_mask); 1892 1893 struct cpumask __cpu_present_mask __read_mostly; 1894 EXPORT_SYMBOL(__cpu_present_mask); 1895 1896 struct cpumask __cpu_active_mask __read_mostly; 1897 EXPORT_SYMBOL(__cpu_active_mask); 1898 1899 void init_cpu_present(const struct cpumask *src) 1900 { 1901 cpumask_copy(&__cpu_present_mask, src); 1902 } 1903 1904 void init_cpu_possible(const struct cpumask *src) 1905 { 1906 cpumask_copy(&__cpu_possible_mask, src); 1907 } 1908 1909 void init_cpu_online(const struct cpumask *src) 1910 { 1911 cpumask_copy(&__cpu_online_mask, src); 1912 } 1913 1914 /* 1915 * Activate the first processor. 1916 */ 1917 void __init boot_cpu_init(void) 1918 { 1919 int cpu = smp_processor_id(); 1920 1921 /* Mark the boot cpu "present", "online" etc for SMP and UP case */ 1922 set_cpu_online(cpu, true); 1923 set_cpu_active(cpu, true); 1924 set_cpu_present(cpu, true); 1925 set_cpu_possible(cpu, true); 1926 } 1927 1928 /* 1929 * Must be called _AFTER_ setting up the per_cpu areas 1930 */ 1931 void __init boot_cpu_state_init(void) 1932 { 1933 per_cpu_ptr(&cpuhp_state, smp_processor_id())->state = CPUHP_ONLINE; 1934 } 1935