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