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