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