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 /* Remove CPU from timer broadcasting */ 848 tick_offline_cpu(cpu); 849 /* Park the stopper thread */ 850 stop_machine_park(cpu); 851 return 0; 852 } 853 854 static int takedown_cpu(unsigned int cpu) 855 { 856 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 857 int err; 858 859 /* Park the smpboot threads */ 860 kthread_park(per_cpu_ptr(&cpuhp_state, cpu)->thread); 861 862 /* 863 * Prevent irq alloc/free while the dying cpu reorganizes the 864 * interrupt affinities. 865 */ 866 irq_lock_sparse(); 867 868 /* 869 * So now all preempt/rcu users must observe !cpu_active(). 870 */ 871 err = stop_machine_cpuslocked(take_cpu_down, NULL, cpumask_of(cpu)); 872 if (err) { 873 /* CPU refused to die */ 874 irq_unlock_sparse(); 875 /* Unpark the hotplug thread so we can rollback there */ 876 kthread_unpark(per_cpu_ptr(&cpuhp_state, cpu)->thread); 877 return err; 878 } 879 BUG_ON(cpu_online(cpu)); 880 881 /* 882 * The teardown callback for CPUHP_AP_SCHED_STARTING will have removed 883 * all runnable tasks from the CPU, there's only the idle task left now 884 * that the migration thread is done doing the stop_machine thing. 885 * 886 * Wait for the stop thread to go away. 887 */ 888 wait_for_ap_thread(st, false); 889 BUG_ON(st->state != CPUHP_AP_IDLE_DEAD); 890 891 /* Interrupts are moved away from the dying cpu, reenable alloc/free */ 892 irq_unlock_sparse(); 893 894 hotplug_cpu__broadcast_tick_pull(cpu); 895 /* This actually kills the CPU. */ 896 __cpu_die(cpu); 897 898 tick_cleanup_dead_cpu(cpu); 899 rcutree_migrate_callbacks(cpu); 900 return 0; 901 } 902 903 static void cpuhp_complete_idle_dead(void *arg) 904 { 905 struct cpuhp_cpu_state *st = arg; 906 907 complete_ap_thread(st, false); 908 } 909 910 void cpuhp_report_idle_dead(void) 911 { 912 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 913 914 BUG_ON(st->state != CPUHP_AP_OFFLINE); 915 rcu_report_dead(smp_processor_id()); 916 st->state = CPUHP_AP_IDLE_DEAD; 917 /* 918 * We cannot call complete after rcu_report_dead() so we delegate it 919 * to an online cpu. 920 */ 921 smp_call_function_single(cpumask_first(cpu_online_mask), 922 cpuhp_complete_idle_dead, st, 0); 923 } 924 925 static void undo_cpu_down(unsigned int cpu, struct cpuhp_cpu_state *st) 926 { 927 for (st->state++; st->state < st->target; st->state++) 928 cpuhp_invoke_callback(cpu, st->state, true, NULL, NULL); 929 } 930 931 static int cpuhp_down_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st, 932 enum cpuhp_state target) 933 { 934 enum cpuhp_state prev_state = st->state; 935 int ret = 0; 936 937 for (; st->state > target; st->state--) { 938 ret = cpuhp_invoke_callback(cpu, st->state, false, NULL, NULL); 939 if (ret) { 940 st->target = prev_state; 941 if (st->state < prev_state) 942 undo_cpu_down(cpu, st); 943 break; 944 } 945 } 946 return ret; 947 } 948 949 /* Requires cpu_add_remove_lock to be held */ 950 static int __ref _cpu_down(unsigned int cpu, int tasks_frozen, 951 enum cpuhp_state target) 952 { 953 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 954 int prev_state, ret = 0; 955 956 if (num_online_cpus() == 1) 957 return -EBUSY; 958 959 if (!cpu_present(cpu)) 960 return -EINVAL; 961 962 cpus_write_lock(); 963 964 cpuhp_tasks_frozen = tasks_frozen; 965 966 prev_state = cpuhp_set_state(st, target); 967 /* 968 * If the current CPU state is in the range of the AP hotplug thread, 969 * then we need to kick the thread. 970 */ 971 if (st->state > CPUHP_TEARDOWN_CPU) { 972 st->target = max((int)target, CPUHP_TEARDOWN_CPU); 973 ret = cpuhp_kick_ap_work(cpu); 974 /* 975 * The AP side has done the error rollback already. Just 976 * return the error code.. 977 */ 978 if (ret) 979 goto out; 980 981 /* 982 * We might have stopped still in the range of the AP hotplug 983 * thread. Nothing to do anymore. 984 */ 985 if (st->state > CPUHP_TEARDOWN_CPU) 986 goto out; 987 988 st->target = target; 989 } 990 /* 991 * The AP brought itself down to CPUHP_TEARDOWN_CPU. So we need 992 * to do the further cleanups. 993 */ 994 ret = cpuhp_down_callbacks(cpu, st, target); 995 if (ret && st->state == CPUHP_TEARDOWN_CPU && st->state < prev_state) { 996 cpuhp_reset_state(st, prev_state); 997 __cpuhp_kick_ap(st); 998 } 999 1000 out: 1001 cpus_write_unlock(); 1002 /* 1003 * Do post unplug cleanup. This is still protected against 1004 * concurrent CPU hotplug via cpu_add_remove_lock. 1005 */ 1006 lockup_detector_cleanup(); 1007 arch_smt_update(); 1008 return ret; 1009 } 1010 1011 static int cpu_down_maps_locked(unsigned int cpu, enum cpuhp_state target) 1012 { 1013 if (cpu_hotplug_disabled) 1014 return -EBUSY; 1015 return _cpu_down(cpu, 0, target); 1016 } 1017 1018 static int do_cpu_down(unsigned int cpu, enum cpuhp_state target) 1019 { 1020 int err; 1021 1022 cpu_maps_update_begin(); 1023 err = cpu_down_maps_locked(cpu, target); 1024 cpu_maps_update_done(); 1025 return err; 1026 } 1027 1028 int cpu_down(unsigned int cpu) 1029 { 1030 return do_cpu_down(cpu, CPUHP_OFFLINE); 1031 } 1032 EXPORT_SYMBOL(cpu_down); 1033 1034 #else 1035 #define takedown_cpu NULL 1036 #endif /*CONFIG_HOTPLUG_CPU*/ 1037 1038 /** 1039 * notify_cpu_starting(cpu) - Invoke the callbacks on the starting CPU 1040 * @cpu: cpu that just started 1041 * 1042 * It must be called by the arch code on the new cpu, before the new cpu 1043 * enables interrupts and before the "boot" cpu returns from __cpu_up(). 1044 */ 1045 void notify_cpu_starting(unsigned int cpu) 1046 { 1047 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1048 enum cpuhp_state target = min((int)st->target, CPUHP_AP_ONLINE); 1049 int ret; 1050 1051 rcu_cpu_starting(cpu); /* Enables RCU usage on this CPU. */ 1052 st->booted_once = true; 1053 while (st->state < target) { 1054 st->state++; 1055 ret = cpuhp_invoke_callback(cpu, st->state, true, NULL, NULL); 1056 /* 1057 * STARTING must not fail! 1058 */ 1059 WARN_ON_ONCE(ret); 1060 } 1061 } 1062 1063 /* 1064 * Called from the idle task. Wake up the controlling task which brings the 1065 * stopper and the hotplug thread of the upcoming CPU up and then delegates 1066 * the rest of the online bringup to the hotplug thread. 1067 */ 1068 void cpuhp_online_idle(enum cpuhp_state state) 1069 { 1070 struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); 1071 1072 /* Happens for the boot cpu */ 1073 if (state != CPUHP_AP_ONLINE_IDLE) 1074 return; 1075 1076 st->state = CPUHP_AP_ONLINE_IDLE; 1077 complete_ap_thread(st, true); 1078 } 1079 1080 /* Requires cpu_add_remove_lock to be held */ 1081 static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target) 1082 { 1083 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1084 struct task_struct *idle; 1085 int ret = 0; 1086 1087 cpus_write_lock(); 1088 1089 if (!cpu_present(cpu)) { 1090 ret = -EINVAL; 1091 goto out; 1092 } 1093 1094 /* 1095 * The caller of do_cpu_up might have raced with another 1096 * caller. Ignore it for now. 1097 */ 1098 if (st->state >= target) 1099 goto out; 1100 1101 if (st->state == CPUHP_OFFLINE) { 1102 /* Let it fail before we try to bring the cpu up */ 1103 idle = idle_thread_get(cpu); 1104 if (IS_ERR(idle)) { 1105 ret = PTR_ERR(idle); 1106 goto out; 1107 } 1108 } 1109 1110 cpuhp_tasks_frozen = tasks_frozen; 1111 1112 cpuhp_set_state(st, target); 1113 /* 1114 * If the current CPU state is in the range of the AP hotplug thread, 1115 * then we need to kick the thread once more. 1116 */ 1117 if (st->state > CPUHP_BRINGUP_CPU) { 1118 ret = cpuhp_kick_ap_work(cpu); 1119 /* 1120 * The AP side has done the error rollback already. Just 1121 * return the error code.. 1122 */ 1123 if (ret) 1124 goto out; 1125 } 1126 1127 /* 1128 * Try to reach the target state. We max out on the BP at 1129 * CPUHP_BRINGUP_CPU. After that the AP hotplug thread is 1130 * responsible for bringing it up to the target state. 1131 */ 1132 target = min((int)target, CPUHP_BRINGUP_CPU); 1133 ret = cpuhp_up_callbacks(cpu, st, target); 1134 out: 1135 cpus_write_unlock(); 1136 arch_smt_update(); 1137 return ret; 1138 } 1139 1140 static int do_cpu_up(unsigned int cpu, enum cpuhp_state target) 1141 { 1142 int err = 0; 1143 1144 if (!cpu_possible(cpu)) { 1145 pr_err("can't online cpu %d because it is not configured as may-hotadd at boot time\n", 1146 cpu); 1147 #if defined(CONFIG_IA64) 1148 pr_err("please check additional_cpus= boot parameter\n"); 1149 #endif 1150 return -EINVAL; 1151 } 1152 1153 err = try_online_node(cpu_to_node(cpu)); 1154 if (err) 1155 return err; 1156 1157 cpu_maps_update_begin(); 1158 1159 if (cpu_hotplug_disabled) { 1160 err = -EBUSY; 1161 goto out; 1162 } 1163 if (!cpu_smt_allowed(cpu)) { 1164 err = -EPERM; 1165 goto out; 1166 } 1167 1168 err = _cpu_up(cpu, 0, target); 1169 out: 1170 cpu_maps_update_done(); 1171 return err; 1172 } 1173 1174 int cpu_up(unsigned int cpu) 1175 { 1176 return do_cpu_up(cpu, CPUHP_ONLINE); 1177 } 1178 EXPORT_SYMBOL_GPL(cpu_up); 1179 1180 #ifdef CONFIG_PM_SLEEP_SMP 1181 static cpumask_var_t frozen_cpus; 1182 1183 int freeze_secondary_cpus(int primary) 1184 { 1185 int cpu, error = 0; 1186 1187 cpu_maps_update_begin(); 1188 if (!cpu_online(primary)) 1189 primary = cpumask_first(cpu_online_mask); 1190 /* 1191 * We take down all of the non-boot CPUs in one shot to avoid races 1192 * with the userspace trying to use the CPU hotplug at the same time 1193 */ 1194 cpumask_clear(frozen_cpus); 1195 1196 pr_info("Disabling non-boot CPUs ...\n"); 1197 for_each_online_cpu(cpu) { 1198 if (cpu == primary) 1199 continue; 1200 trace_suspend_resume(TPS("CPU_OFF"), cpu, true); 1201 error = _cpu_down(cpu, 1, CPUHP_OFFLINE); 1202 trace_suspend_resume(TPS("CPU_OFF"), cpu, false); 1203 if (!error) 1204 cpumask_set_cpu(cpu, frozen_cpus); 1205 else { 1206 pr_err("Error taking CPU%d down: %d\n", cpu, error); 1207 break; 1208 } 1209 } 1210 1211 if (!error) 1212 BUG_ON(num_online_cpus() > 1); 1213 else 1214 pr_err("Non-boot CPUs are not disabled\n"); 1215 1216 /* 1217 * Make sure the CPUs won't be enabled by someone else. We need to do 1218 * this even in case of failure as all disable_nonboot_cpus() users are 1219 * supposed to do enable_nonboot_cpus() on the failure path. 1220 */ 1221 cpu_hotplug_disabled++; 1222 1223 cpu_maps_update_done(); 1224 return error; 1225 } 1226 1227 void __weak arch_enable_nonboot_cpus_begin(void) 1228 { 1229 } 1230 1231 void __weak arch_enable_nonboot_cpus_end(void) 1232 { 1233 } 1234 1235 void enable_nonboot_cpus(void) 1236 { 1237 int cpu, error; 1238 1239 /* Allow everyone to use the CPU hotplug again */ 1240 cpu_maps_update_begin(); 1241 __cpu_hotplug_enable(); 1242 if (cpumask_empty(frozen_cpus)) 1243 goto out; 1244 1245 pr_info("Enabling non-boot CPUs ...\n"); 1246 1247 arch_enable_nonboot_cpus_begin(); 1248 1249 for_each_cpu(cpu, frozen_cpus) { 1250 trace_suspend_resume(TPS("CPU_ON"), cpu, true); 1251 error = _cpu_up(cpu, 1, CPUHP_ONLINE); 1252 trace_suspend_resume(TPS("CPU_ON"), cpu, false); 1253 if (!error) { 1254 pr_info("CPU%d is up\n", cpu); 1255 continue; 1256 } 1257 pr_warn("Error taking CPU%d up: %d\n", cpu, error); 1258 } 1259 1260 arch_enable_nonboot_cpus_end(); 1261 1262 cpumask_clear(frozen_cpus); 1263 out: 1264 cpu_maps_update_done(); 1265 } 1266 1267 static int __init alloc_frozen_cpus(void) 1268 { 1269 if (!alloc_cpumask_var(&frozen_cpus, GFP_KERNEL|__GFP_ZERO)) 1270 return -ENOMEM; 1271 return 0; 1272 } 1273 core_initcall(alloc_frozen_cpus); 1274 1275 /* 1276 * When callbacks for CPU hotplug notifications are being executed, we must 1277 * ensure that the state of the system with respect to the tasks being frozen 1278 * or not, as reported by the notification, remains unchanged *throughout the 1279 * duration* of the execution of the callbacks. 1280 * Hence we need to prevent the freezer from racing with regular CPU hotplug. 1281 * 1282 * This synchronization is implemented by mutually excluding regular CPU 1283 * hotplug and Suspend/Hibernate call paths by hooking onto the Suspend/ 1284 * Hibernate notifications. 1285 */ 1286 static int 1287 cpu_hotplug_pm_callback(struct notifier_block *nb, 1288 unsigned long action, void *ptr) 1289 { 1290 switch (action) { 1291 1292 case PM_SUSPEND_PREPARE: 1293 case PM_HIBERNATION_PREPARE: 1294 cpu_hotplug_disable(); 1295 break; 1296 1297 case PM_POST_SUSPEND: 1298 case PM_POST_HIBERNATION: 1299 cpu_hotplug_enable(); 1300 break; 1301 1302 default: 1303 return NOTIFY_DONE; 1304 } 1305 1306 return NOTIFY_OK; 1307 } 1308 1309 1310 static int __init cpu_hotplug_pm_sync_init(void) 1311 { 1312 /* 1313 * cpu_hotplug_pm_callback has higher priority than x86 1314 * bsp_pm_callback which depends on cpu_hotplug_pm_callback 1315 * to disable cpu hotplug to avoid cpu hotplug race. 1316 */ 1317 pm_notifier(cpu_hotplug_pm_callback, 0); 1318 return 0; 1319 } 1320 core_initcall(cpu_hotplug_pm_sync_init); 1321 1322 #endif /* CONFIG_PM_SLEEP_SMP */ 1323 1324 int __boot_cpu_id; 1325 1326 #endif /* CONFIG_SMP */ 1327 1328 /* Boot processor state steps */ 1329 static struct cpuhp_step cpuhp_hp_states[] = { 1330 [CPUHP_OFFLINE] = { 1331 .name = "offline", 1332 .startup.single = NULL, 1333 .teardown.single = NULL, 1334 }, 1335 #ifdef CONFIG_SMP 1336 [CPUHP_CREATE_THREADS]= { 1337 .name = "threads:prepare", 1338 .startup.single = smpboot_create_threads, 1339 .teardown.single = NULL, 1340 .cant_stop = true, 1341 }, 1342 [CPUHP_PERF_PREPARE] = { 1343 .name = "perf:prepare", 1344 .startup.single = perf_event_init_cpu, 1345 .teardown.single = perf_event_exit_cpu, 1346 }, 1347 [CPUHP_WORKQUEUE_PREP] = { 1348 .name = "workqueue:prepare", 1349 .startup.single = workqueue_prepare_cpu, 1350 .teardown.single = NULL, 1351 }, 1352 [CPUHP_HRTIMERS_PREPARE] = { 1353 .name = "hrtimers:prepare", 1354 .startup.single = hrtimers_prepare_cpu, 1355 .teardown.single = hrtimers_dead_cpu, 1356 }, 1357 [CPUHP_SMPCFD_PREPARE] = { 1358 .name = "smpcfd:prepare", 1359 .startup.single = smpcfd_prepare_cpu, 1360 .teardown.single = smpcfd_dead_cpu, 1361 }, 1362 [CPUHP_RELAY_PREPARE] = { 1363 .name = "relay:prepare", 1364 .startup.single = relay_prepare_cpu, 1365 .teardown.single = NULL, 1366 }, 1367 [CPUHP_SLAB_PREPARE] = { 1368 .name = "slab:prepare", 1369 .startup.single = slab_prepare_cpu, 1370 .teardown.single = slab_dead_cpu, 1371 }, 1372 [CPUHP_RCUTREE_PREP] = { 1373 .name = "RCU/tree:prepare", 1374 .startup.single = rcutree_prepare_cpu, 1375 .teardown.single = rcutree_dead_cpu, 1376 }, 1377 /* 1378 * On the tear-down path, timers_dead_cpu() must be invoked 1379 * before blk_mq_queue_reinit_notify() from notify_dead(), 1380 * otherwise a RCU stall occurs. 1381 */ 1382 [CPUHP_TIMERS_PREPARE] = { 1383 .name = "timers:prepare", 1384 .startup.single = timers_prepare_cpu, 1385 .teardown.single = timers_dead_cpu, 1386 }, 1387 /* Kicks the plugged cpu into life */ 1388 [CPUHP_BRINGUP_CPU] = { 1389 .name = "cpu:bringup", 1390 .startup.single = bringup_cpu, 1391 .teardown.single = NULL, 1392 .cant_stop = true, 1393 }, 1394 /* Final state before CPU kills itself */ 1395 [CPUHP_AP_IDLE_DEAD] = { 1396 .name = "idle:dead", 1397 }, 1398 /* 1399 * Last state before CPU enters the idle loop to die. Transient state 1400 * for synchronization. 1401 */ 1402 [CPUHP_AP_OFFLINE] = { 1403 .name = "ap:offline", 1404 .cant_stop = true, 1405 }, 1406 /* First state is scheduler control. Interrupts are disabled */ 1407 [CPUHP_AP_SCHED_STARTING] = { 1408 .name = "sched:starting", 1409 .startup.single = sched_cpu_starting, 1410 .teardown.single = sched_cpu_dying, 1411 }, 1412 [CPUHP_AP_RCUTREE_DYING] = { 1413 .name = "RCU/tree:dying", 1414 .startup.single = NULL, 1415 .teardown.single = rcutree_dying_cpu, 1416 }, 1417 [CPUHP_AP_SMPCFD_DYING] = { 1418 .name = "smpcfd:dying", 1419 .startup.single = NULL, 1420 .teardown.single = smpcfd_dying_cpu, 1421 }, 1422 /* Entry state on starting. Interrupts enabled from here on. Transient 1423 * state for synchronsization */ 1424 [CPUHP_AP_ONLINE] = { 1425 .name = "ap:online", 1426 }, 1427 /* 1428 * Handled on controll processor until the plugged processor manages 1429 * this itself. 1430 */ 1431 [CPUHP_TEARDOWN_CPU] = { 1432 .name = "cpu:teardown", 1433 .startup.single = NULL, 1434 .teardown.single = takedown_cpu, 1435 .cant_stop = true, 1436 }, 1437 /* Handle smpboot threads park/unpark */ 1438 [CPUHP_AP_SMPBOOT_THREADS] = { 1439 .name = "smpboot/threads:online", 1440 .startup.single = smpboot_unpark_threads, 1441 .teardown.single = smpboot_park_threads, 1442 }, 1443 [CPUHP_AP_IRQ_AFFINITY_ONLINE] = { 1444 .name = "irq/affinity:online", 1445 .startup.single = irq_affinity_online_cpu, 1446 .teardown.single = NULL, 1447 }, 1448 [CPUHP_AP_PERF_ONLINE] = { 1449 .name = "perf:online", 1450 .startup.single = perf_event_init_cpu, 1451 .teardown.single = perf_event_exit_cpu, 1452 }, 1453 [CPUHP_AP_WATCHDOG_ONLINE] = { 1454 .name = "lockup_detector:online", 1455 .startup.single = lockup_detector_online_cpu, 1456 .teardown.single = lockup_detector_offline_cpu, 1457 }, 1458 [CPUHP_AP_WORKQUEUE_ONLINE] = { 1459 .name = "workqueue:online", 1460 .startup.single = workqueue_online_cpu, 1461 .teardown.single = workqueue_offline_cpu, 1462 }, 1463 [CPUHP_AP_RCUTREE_ONLINE] = { 1464 .name = "RCU/tree:online", 1465 .startup.single = rcutree_online_cpu, 1466 .teardown.single = rcutree_offline_cpu, 1467 }, 1468 #endif 1469 /* 1470 * The dynamically registered state space is here 1471 */ 1472 1473 #ifdef CONFIG_SMP 1474 /* Last state is scheduler control setting the cpu active */ 1475 [CPUHP_AP_ACTIVE] = { 1476 .name = "sched:active", 1477 .startup.single = sched_cpu_activate, 1478 .teardown.single = sched_cpu_deactivate, 1479 }, 1480 #endif 1481 1482 /* CPU is fully up and running. */ 1483 [CPUHP_ONLINE] = { 1484 .name = "online", 1485 .startup.single = NULL, 1486 .teardown.single = NULL, 1487 }, 1488 }; 1489 1490 /* Sanity check for callbacks */ 1491 static int cpuhp_cb_check(enum cpuhp_state state) 1492 { 1493 if (state <= CPUHP_OFFLINE || state >= CPUHP_ONLINE) 1494 return -EINVAL; 1495 return 0; 1496 } 1497 1498 /* 1499 * Returns a free for dynamic slot assignment of the Online state. The states 1500 * are protected by the cpuhp_slot_states mutex and an empty slot is identified 1501 * by having no name assigned. 1502 */ 1503 static int cpuhp_reserve_state(enum cpuhp_state state) 1504 { 1505 enum cpuhp_state i, end; 1506 struct cpuhp_step *step; 1507 1508 switch (state) { 1509 case CPUHP_AP_ONLINE_DYN: 1510 step = cpuhp_hp_states + CPUHP_AP_ONLINE_DYN; 1511 end = CPUHP_AP_ONLINE_DYN_END; 1512 break; 1513 case CPUHP_BP_PREPARE_DYN: 1514 step = cpuhp_hp_states + CPUHP_BP_PREPARE_DYN; 1515 end = CPUHP_BP_PREPARE_DYN_END; 1516 break; 1517 default: 1518 return -EINVAL; 1519 } 1520 1521 for (i = state; i <= end; i++, step++) { 1522 if (!step->name) 1523 return i; 1524 } 1525 WARN(1, "No more dynamic states available for CPU hotplug\n"); 1526 return -ENOSPC; 1527 } 1528 1529 static int cpuhp_store_callbacks(enum cpuhp_state state, const char *name, 1530 int (*startup)(unsigned int cpu), 1531 int (*teardown)(unsigned int cpu), 1532 bool multi_instance) 1533 { 1534 /* (Un)Install the callbacks for further cpu hotplug operations */ 1535 struct cpuhp_step *sp; 1536 int ret = 0; 1537 1538 /* 1539 * If name is NULL, then the state gets removed. 1540 * 1541 * CPUHP_AP_ONLINE_DYN and CPUHP_BP_PREPARE_DYN are handed out on 1542 * the first allocation from these dynamic ranges, so the removal 1543 * would trigger a new allocation and clear the wrong (already 1544 * empty) state, leaving the callbacks of the to be cleared state 1545 * dangling, which causes wreckage on the next hotplug operation. 1546 */ 1547 if (name && (state == CPUHP_AP_ONLINE_DYN || 1548 state == CPUHP_BP_PREPARE_DYN)) { 1549 ret = cpuhp_reserve_state(state); 1550 if (ret < 0) 1551 return ret; 1552 state = ret; 1553 } 1554 sp = cpuhp_get_step(state); 1555 if (name && sp->name) 1556 return -EBUSY; 1557 1558 sp->startup.single = startup; 1559 sp->teardown.single = teardown; 1560 sp->name = name; 1561 sp->multi_instance = multi_instance; 1562 INIT_HLIST_HEAD(&sp->list); 1563 return ret; 1564 } 1565 1566 static void *cpuhp_get_teardown_cb(enum cpuhp_state state) 1567 { 1568 return cpuhp_get_step(state)->teardown.single; 1569 } 1570 1571 /* 1572 * Call the startup/teardown function for a step either on the AP or 1573 * on the current CPU. 1574 */ 1575 static int cpuhp_issue_call(int cpu, enum cpuhp_state state, bool bringup, 1576 struct hlist_node *node) 1577 { 1578 struct cpuhp_step *sp = cpuhp_get_step(state); 1579 int ret; 1580 1581 /* 1582 * If there's nothing to do, we done. 1583 * Relies on the union for multi_instance. 1584 */ 1585 if ((bringup && !sp->startup.single) || 1586 (!bringup && !sp->teardown.single)) 1587 return 0; 1588 /* 1589 * The non AP bound callbacks can fail on bringup. On teardown 1590 * e.g. module removal we crash for now. 1591 */ 1592 #ifdef CONFIG_SMP 1593 if (cpuhp_is_ap_state(state)) 1594 ret = cpuhp_invoke_ap_callback(cpu, state, bringup, node); 1595 else 1596 ret = cpuhp_invoke_callback(cpu, state, bringup, node, NULL); 1597 #else 1598 ret = cpuhp_invoke_callback(cpu, state, bringup, node, NULL); 1599 #endif 1600 BUG_ON(ret && !bringup); 1601 return ret; 1602 } 1603 1604 /* 1605 * Called from __cpuhp_setup_state on a recoverable failure. 1606 * 1607 * Note: The teardown callbacks for rollback are not allowed to fail! 1608 */ 1609 static void cpuhp_rollback_install(int failedcpu, enum cpuhp_state state, 1610 struct hlist_node *node) 1611 { 1612 int cpu; 1613 1614 /* Roll back the already executed steps on the other cpus */ 1615 for_each_present_cpu(cpu) { 1616 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1617 int cpustate = st->state; 1618 1619 if (cpu >= failedcpu) 1620 break; 1621 1622 /* Did we invoke the startup call on that cpu ? */ 1623 if (cpustate >= state) 1624 cpuhp_issue_call(cpu, state, false, node); 1625 } 1626 } 1627 1628 int __cpuhp_state_add_instance_cpuslocked(enum cpuhp_state state, 1629 struct hlist_node *node, 1630 bool invoke) 1631 { 1632 struct cpuhp_step *sp; 1633 int cpu; 1634 int ret; 1635 1636 lockdep_assert_cpus_held(); 1637 1638 sp = cpuhp_get_step(state); 1639 if (sp->multi_instance == false) 1640 return -EINVAL; 1641 1642 mutex_lock(&cpuhp_state_mutex); 1643 1644 if (!invoke || !sp->startup.multi) 1645 goto add_node; 1646 1647 /* 1648 * Try to call the startup callback for each present cpu 1649 * depending on the hotplug state of the cpu. 1650 */ 1651 for_each_present_cpu(cpu) { 1652 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1653 int cpustate = st->state; 1654 1655 if (cpustate < state) 1656 continue; 1657 1658 ret = cpuhp_issue_call(cpu, state, true, node); 1659 if (ret) { 1660 if (sp->teardown.multi) 1661 cpuhp_rollback_install(cpu, state, node); 1662 goto unlock; 1663 } 1664 } 1665 add_node: 1666 ret = 0; 1667 hlist_add_head(node, &sp->list); 1668 unlock: 1669 mutex_unlock(&cpuhp_state_mutex); 1670 return ret; 1671 } 1672 1673 int __cpuhp_state_add_instance(enum cpuhp_state state, struct hlist_node *node, 1674 bool invoke) 1675 { 1676 int ret; 1677 1678 cpus_read_lock(); 1679 ret = __cpuhp_state_add_instance_cpuslocked(state, node, invoke); 1680 cpus_read_unlock(); 1681 return ret; 1682 } 1683 EXPORT_SYMBOL_GPL(__cpuhp_state_add_instance); 1684 1685 /** 1686 * __cpuhp_setup_state_cpuslocked - Setup the callbacks for an hotplug machine state 1687 * @state: The state to setup 1688 * @invoke: If true, the startup function is invoked for cpus where 1689 * cpu state >= @state 1690 * @startup: startup callback function 1691 * @teardown: teardown callback function 1692 * @multi_instance: State is set up for multiple instances which get 1693 * added afterwards. 1694 * 1695 * The caller needs to hold cpus read locked while calling this function. 1696 * Returns: 1697 * On success: 1698 * Positive state number if @state is CPUHP_AP_ONLINE_DYN 1699 * 0 for all other states 1700 * On failure: proper (negative) error code 1701 */ 1702 int __cpuhp_setup_state_cpuslocked(enum cpuhp_state state, 1703 const char *name, bool invoke, 1704 int (*startup)(unsigned int cpu), 1705 int (*teardown)(unsigned int cpu), 1706 bool multi_instance) 1707 { 1708 int cpu, ret = 0; 1709 bool dynstate; 1710 1711 lockdep_assert_cpus_held(); 1712 1713 if (cpuhp_cb_check(state) || !name) 1714 return -EINVAL; 1715 1716 mutex_lock(&cpuhp_state_mutex); 1717 1718 ret = cpuhp_store_callbacks(state, name, startup, teardown, 1719 multi_instance); 1720 1721 dynstate = state == CPUHP_AP_ONLINE_DYN; 1722 if (ret > 0 && dynstate) { 1723 state = ret; 1724 ret = 0; 1725 } 1726 1727 if (ret || !invoke || !startup) 1728 goto out; 1729 1730 /* 1731 * Try to call the startup callback for each present cpu 1732 * depending on the hotplug state of the cpu. 1733 */ 1734 for_each_present_cpu(cpu) { 1735 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1736 int cpustate = st->state; 1737 1738 if (cpustate < state) 1739 continue; 1740 1741 ret = cpuhp_issue_call(cpu, state, true, NULL); 1742 if (ret) { 1743 if (teardown) 1744 cpuhp_rollback_install(cpu, state, NULL); 1745 cpuhp_store_callbacks(state, NULL, NULL, NULL, false); 1746 goto out; 1747 } 1748 } 1749 out: 1750 mutex_unlock(&cpuhp_state_mutex); 1751 /* 1752 * If the requested state is CPUHP_AP_ONLINE_DYN, return the 1753 * dynamically allocated state in case of success. 1754 */ 1755 if (!ret && dynstate) 1756 return state; 1757 return ret; 1758 } 1759 EXPORT_SYMBOL(__cpuhp_setup_state_cpuslocked); 1760 1761 int __cpuhp_setup_state(enum cpuhp_state state, 1762 const char *name, bool invoke, 1763 int (*startup)(unsigned int cpu), 1764 int (*teardown)(unsigned int cpu), 1765 bool multi_instance) 1766 { 1767 int ret; 1768 1769 cpus_read_lock(); 1770 ret = __cpuhp_setup_state_cpuslocked(state, name, invoke, startup, 1771 teardown, multi_instance); 1772 cpus_read_unlock(); 1773 return ret; 1774 } 1775 EXPORT_SYMBOL(__cpuhp_setup_state); 1776 1777 int __cpuhp_state_remove_instance(enum cpuhp_state state, 1778 struct hlist_node *node, bool invoke) 1779 { 1780 struct cpuhp_step *sp = cpuhp_get_step(state); 1781 int cpu; 1782 1783 BUG_ON(cpuhp_cb_check(state)); 1784 1785 if (!sp->multi_instance) 1786 return -EINVAL; 1787 1788 cpus_read_lock(); 1789 mutex_lock(&cpuhp_state_mutex); 1790 1791 if (!invoke || !cpuhp_get_teardown_cb(state)) 1792 goto remove; 1793 /* 1794 * Call the teardown callback for each present cpu depending 1795 * on the hotplug state of the cpu. This function is not 1796 * allowed to fail currently! 1797 */ 1798 for_each_present_cpu(cpu) { 1799 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1800 int cpustate = st->state; 1801 1802 if (cpustate >= state) 1803 cpuhp_issue_call(cpu, state, false, node); 1804 } 1805 1806 remove: 1807 hlist_del(node); 1808 mutex_unlock(&cpuhp_state_mutex); 1809 cpus_read_unlock(); 1810 1811 return 0; 1812 } 1813 EXPORT_SYMBOL_GPL(__cpuhp_state_remove_instance); 1814 1815 /** 1816 * __cpuhp_remove_state_cpuslocked - Remove the callbacks for an hotplug machine state 1817 * @state: The state to remove 1818 * @invoke: If true, the teardown function is invoked for cpus where 1819 * cpu state >= @state 1820 * 1821 * The caller needs to hold cpus read locked while calling this function. 1822 * The teardown callback is currently not allowed to fail. Think 1823 * about module removal! 1824 */ 1825 void __cpuhp_remove_state_cpuslocked(enum cpuhp_state state, bool invoke) 1826 { 1827 struct cpuhp_step *sp = cpuhp_get_step(state); 1828 int cpu; 1829 1830 BUG_ON(cpuhp_cb_check(state)); 1831 1832 lockdep_assert_cpus_held(); 1833 1834 mutex_lock(&cpuhp_state_mutex); 1835 if (sp->multi_instance) { 1836 WARN(!hlist_empty(&sp->list), 1837 "Error: Removing state %d which has instances left.\n", 1838 state); 1839 goto remove; 1840 } 1841 1842 if (!invoke || !cpuhp_get_teardown_cb(state)) 1843 goto remove; 1844 1845 /* 1846 * Call the teardown callback for each present cpu depending 1847 * on the hotplug state of the cpu. This function is not 1848 * allowed to fail currently! 1849 */ 1850 for_each_present_cpu(cpu) { 1851 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); 1852 int cpustate = st->state; 1853 1854 if (cpustate >= state) 1855 cpuhp_issue_call(cpu, state, false, NULL); 1856 } 1857 remove: 1858 cpuhp_store_callbacks(state, NULL, NULL, NULL, false); 1859 mutex_unlock(&cpuhp_state_mutex); 1860 } 1861 EXPORT_SYMBOL(__cpuhp_remove_state_cpuslocked); 1862 1863 void __cpuhp_remove_state(enum cpuhp_state state, bool invoke) 1864 { 1865 cpus_read_lock(); 1866 __cpuhp_remove_state_cpuslocked(state, invoke); 1867 cpus_read_unlock(); 1868 } 1869 EXPORT_SYMBOL(__cpuhp_remove_state); 1870 1871 #if defined(CONFIG_SYSFS) && defined(CONFIG_HOTPLUG_CPU) 1872 static ssize_t show_cpuhp_state(struct device *dev, 1873 struct device_attribute *attr, char *buf) 1874 { 1875 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1876 1877 return sprintf(buf, "%d\n", st->state); 1878 } 1879 static DEVICE_ATTR(state, 0444, show_cpuhp_state, NULL); 1880 1881 static ssize_t write_cpuhp_target(struct device *dev, 1882 struct device_attribute *attr, 1883 const char *buf, size_t count) 1884 { 1885 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1886 struct cpuhp_step *sp; 1887 int target, ret; 1888 1889 ret = kstrtoint(buf, 10, &target); 1890 if (ret) 1891 return ret; 1892 1893 #ifdef CONFIG_CPU_HOTPLUG_STATE_CONTROL 1894 if (target < CPUHP_OFFLINE || target > CPUHP_ONLINE) 1895 return -EINVAL; 1896 #else 1897 if (target != CPUHP_OFFLINE && target != CPUHP_ONLINE) 1898 return -EINVAL; 1899 #endif 1900 1901 ret = lock_device_hotplug_sysfs(); 1902 if (ret) 1903 return ret; 1904 1905 mutex_lock(&cpuhp_state_mutex); 1906 sp = cpuhp_get_step(target); 1907 ret = !sp->name || sp->cant_stop ? -EINVAL : 0; 1908 mutex_unlock(&cpuhp_state_mutex); 1909 if (ret) 1910 goto out; 1911 1912 if (st->state < target) 1913 ret = do_cpu_up(dev->id, target); 1914 else 1915 ret = do_cpu_down(dev->id, target); 1916 out: 1917 unlock_device_hotplug(); 1918 return ret ? ret : count; 1919 } 1920 1921 static ssize_t show_cpuhp_target(struct device *dev, 1922 struct device_attribute *attr, char *buf) 1923 { 1924 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1925 1926 return sprintf(buf, "%d\n", st->target); 1927 } 1928 static DEVICE_ATTR(target, 0644, show_cpuhp_target, write_cpuhp_target); 1929 1930 1931 static ssize_t write_cpuhp_fail(struct device *dev, 1932 struct device_attribute *attr, 1933 const char *buf, size_t count) 1934 { 1935 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1936 struct cpuhp_step *sp; 1937 int fail, ret; 1938 1939 ret = kstrtoint(buf, 10, &fail); 1940 if (ret) 1941 return ret; 1942 1943 /* 1944 * Cannot fail STARTING/DYING callbacks. 1945 */ 1946 if (cpuhp_is_atomic_state(fail)) 1947 return -EINVAL; 1948 1949 /* 1950 * Cannot fail anything that doesn't have callbacks. 1951 */ 1952 mutex_lock(&cpuhp_state_mutex); 1953 sp = cpuhp_get_step(fail); 1954 if (!sp->startup.single && !sp->teardown.single) 1955 ret = -EINVAL; 1956 mutex_unlock(&cpuhp_state_mutex); 1957 if (ret) 1958 return ret; 1959 1960 st->fail = fail; 1961 1962 return count; 1963 } 1964 1965 static ssize_t show_cpuhp_fail(struct device *dev, 1966 struct device_attribute *attr, char *buf) 1967 { 1968 struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, dev->id); 1969 1970 return sprintf(buf, "%d\n", st->fail); 1971 } 1972 1973 static DEVICE_ATTR(fail, 0644, show_cpuhp_fail, write_cpuhp_fail); 1974 1975 static struct attribute *cpuhp_cpu_attrs[] = { 1976 &dev_attr_state.attr, 1977 &dev_attr_target.attr, 1978 &dev_attr_fail.attr, 1979 NULL 1980 }; 1981 1982 static const struct attribute_group cpuhp_cpu_attr_group = { 1983 .attrs = cpuhp_cpu_attrs, 1984 .name = "hotplug", 1985 NULL 1986 }; 1987 1988 static ssize_t show_cpuhp_states(struct device *dev, 1989 struct device_attribute *attr, char *buf) 1990 { 1991 ssize_t cur, res = 0; 1992 int i; 1993 1994 mutex_lock(&cpuhp_state_mutex); 1995 for (i = CPUHP_OFFLINE; i <= CPUHP_ONLINE; i++) { 1996 struct cpuhp_step *sp = cpuhp_get_step(i); 1997 1998 if (sp->name) { 1999 cur = sprintf(buf, "%3d: %s\n", i, sp->name); 2000 buf += cur; 2001 res += cur; 2002 } 2003 } 2004 mutex_unlock(&cpuhp_state_mutex); 2005 return res; 2006 } 2007 static DEVICE_ATTR(states, 0444, show_cpuhp_states, NULL); 2008 2009 static struct attribute *cpuhp_cpu_root_attrs[] = { 2010 &dev_attr_states.attr, 2011 NULL 2012 }; 2013 2014 static const struct attribute_group cpuhp_cpu_root_attr_group = { 2015 .attrs = cpuhp_cpu_root_attrs, 2016 .name = "hotplug", 2017 NULL 2018 }; 2019 2020 #ifdef CONFIG_HOTPLUG_SMT 2021 2022 static const char *smt_states[] = { 2023 [CPU_SMT_ENABLED] = "on", 2024 [CPU_SMT_DISABLED] = "off", 2025 [CPU_SMT_FORCE_DISABLED] = "forceoff", 2026 [CPU_SMT_NOT_SUPPORTED] = "notsupported", 2027 }; 2028 2029 static ssize_t 2030 show_smt_control(struct device *dev, struct device_attribute *attr, char *buf) 2031 { 2032 return snprintf(buf, PAGE_SIZE - 2, "%s\n", smt_states[cpu_smt_control]); 2033 } 2034 2035 static void cpuhp_offline_cpu_device(unsigned int cpu) 2036 { 2037 struct device *dev = get_cpu_device(cpu); 2038 2039 dev->offline = true; 2040 /* Tell user space about the state change */ 2041 kobject_uevent(&dev->kobj, KOBJ_OFFLINE); 2042 } 2043 2044 static void cpuhp_online_cpu_device(unsigned int cpu) 2045 { 2046 struct device *dev = get_cpu_device(cpu); 2047 2048 dev->offline = false; 2049 /* Tell user space about the state change */ 2050 kobject_uevent(&dev->kobj, KOBJ_ONLINE); 2051 } 2052 2053 static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) 2054 { 2055 int cpu, ret = 0; 2056 2057 cpu_maps_update_begin(); 2058 for_each_online_cpu(cpu) { 2059 if (topology_is_primary_thread(cpu)) 2060 continue; 2061 ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE); 2062 if (ret) 2063 break; 2064 /* 2065 * As this needs to hold the cpu maps lock it's impossible 2066 * to call device_offline() because that ends up calling 2067 * cpu_down() which takes cpu maps lock. cpu maps lock 2068 * needs to be held as this might race against in kernel 2069 * abusers of the hotplug machinery (thermal management). 2070 * 2071 * So nothing would update device:offline state. That would 2072 * leave the sysfs entry stale and prevent onlining after 2073 * smt control has been changed to 'off' again. This is 2074 * called under the sysfs hotplug lock, so it is properly 2075 * serialized against the regular offline usage. 2076 */ 2077 cpuhp_offline_cpu_device(cpu); 2078 } 2079 if (!ret) 2080 cpu_smt_control = ctrlval; 2081 cpu_maps_update_done(); 2082 return ret; 2083 } 2084 2085 static int cpuhp_smt_enable(void) 2086 { 2087 int cpu, ret = 0; 2088 2089 cpu_maps_update_begin(); 2090 cpu_smt_control = CPU_SMT_ENABLED; 2091 for_each_present_cpu(cpu) { 2092 /* Skip online CPUs and CPUs on offline nodes */ 2093 if (cpu_online(cpu) || !node_online(cpu_to_node(cpu))) 2094 continue; 2095 ret = _cpu_up(cpu, 0, CPUHP_ONLINE); 2096 if (ret) 2097 break; 2098 /* See comment in cpuhp_smt_disable() */ 2099 cpuhp_online_cpu_device(cpu); 2100 } 2101 cpu_maps_update_done(); 2102 return ret; 2103 } 2104 2105 static ssize_t 2106 store_smt_control(struct device *dev, struct device_attribute *attr, 2107 const char *buf, size_t count) 2108 { 2109 int ctrlval, ret; 2110 2111 if (sysfs_streq(buf, "on")) 2112 ctrlval = CPU_SMT_ENABLED; 2113 else if (sysfs_streq(buf, "off")) 2114 ctrlval = CPU_SMT_DISABLED; 2115 else if (sysfs_streq(buf, "forceoff")) 2116 ctrlval = CPU_SMT_FORCE_DISABLED; 2117 else 2118 return -EINVAL; 2119 2120 if (cpu_smt_control == CPU_SMT_FORCE_DISABLED) 2121 return -EPERM; 2122 2123 if (cpu_smt_control == CPU_SMT_NOT_SUPPORTED) 2124 return -ENODEV; 2125 2126 ret = lock_device_hotplug_sysfs(); 2127 if (ret) 2128 return ret; 2129 2130 if (ctrlval != cpu_smt_control) { 2131 switch (ctrlval) { 2132 case CPU_SMT_ENABLED: 2133 ret = cpuhp_smt_enable(); 2134 break; 2135 case CPU_SMT_DISABLED: 2136 case CPU_SMT_FORCE_DISABLED: 2137 ret = cpuhp_smt_disable(ctrlval); 2138 break; 2139 } 2140 } 2141 2142 unlock_device_hotplug(); 2143 return ret ? ret : count; 2144 } 2145 static DEVICE_ATTR(control, 0644, show_smt_control, store_smt_control); 2146 2147 static ssize_t 2148 show_smt_active(struct device *dev, struct device_attribute *attr, char *buf) 2149 { 2150 bool active = topology_max_smt_threads() > 1; 2151 2152 return snprintf(buf, PAGE_SIZE - 2, "%d\n", active); 2153 } 2154 static DEVICE_ATTR(active, 0444, show_smt_active, NULL); 2155 2156 static struct attribute *cpuhp_smt_attrs[] = { 2157 &dev_attr_control.attr, 2158 &dev_attr_active.attr, 2159 NULL 2160 }; 2161 2162 static const struct attribute_group cpuhp_smt_attr_group = { 2163 .attrs = cpuhp_smt_attrs, 2164 .name = "smt", 2165 NULL 2166 }; 2167 2168 static int __init cpu_smt_state_init(void) 2169 { 2170 return sysfs_create_group(&cpu_subsys.dev_root->kobj, 2171 &cpuhp_smt_attr_group); 2172 } 2173 2174 #else 2175 static inline int cpu_smt_state_init(void) { return 0; } 2176 #endif 2177 2178 static int __init cpuhp_sysfs_init(void) 2179 { 2180 int cpu, ret; 2181 2182 ret = cpu_smt_state_init(); 2183 if (ret) 2184 return ret; 2185 2186 ret = sysfs_create_group(&cpu_subsys.dev_root->kobj, 2187 &cpuhp_cpu_root_attr_group); 2188 if (ret) 2189 return ret; 2190 2191 for_each_possible_cpu(cpu) { 2192 struct device *dev = get_cpu_device(cpu); 2193 2194 if (!dev) 2195 continue; 2196 ret = sysfs_create_group(&dev->kobj, &cpuhp_cpu_attr_group); 2197 if (ret) 2198 return ret; 2199 } 2200 return 0; 2201 } 2202 device_initcall(cpuhp_sysfs_init); 2203 #endif 2204 2205 /* 2206 * cpu_bit_bitmap[] is a special, "compressed" data structure that 2207 * represents all NR_CPUS bits binary values of 1<<nr. 2208 * 2209 * It is used by cpumask_of() to get a constant address to a CPU 2210 * mask value that has a single bit set only. 2211 */ 2212 2213 /* cpu_bit_bitmap[0] is empty - so we can back into it */ 2214 #define MASK_DECLARE_1(x) [x+1][0] = (1UL << (x)) 2215 #define MASK_DECLARE_2(x) MASK_DECLARE_1(x), MASK_DECLARE_1(x+1) 2216 #define MASK_DECLARE_4(x) MASK_DECLARE_2(x), MASK_DECLARE_2(x+2) 2217 #define MASK_DECLARE_8(x) MASK_DECLARE_4(x), MASK_DECLARE_4(x+4) 2218 2219 const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)] = { 2220 2221 MASK_DECLARE_8(0), MASK_DECLARE_8(8), 2222 MASK_DECLARE_8(16), MASK_DECLARE_8(24), 2223 #if BITS_PER_LONG > 32 2224 MASK_DECLARE_8(32), MASK_DECLARE_8(40), 2225 MASK_DECLARE_8(48), MASK_DECLARE_8(56), 2226 #endif 2227 }; 2228 EXPORT_SYMBOL_GPL(cpu_bit_bitmap); 2229 2230 const DECLARE_BITMAP(cpu_all_bits, NR_CPUS) = CPU_BITS_ALL; 2231 EXPORT_SYMBOL(cpu_all_bits); 2232 2233 #ifdef CONFIG_INIT_ALL_POSSIBLE 2234 struct cpumask __cpu_possible_mask __read_mostly 2235 = {CPU_BITS_ALL}; 2236 #else 2237 struct cpumask __cpu_possible_mask __read_mostly; 2238 #endif 2239 EXPORT_SYMBOL(__cpu_possible_mask); 2240 2241 struct cpumask __cpu_online_mask __read_mostly; 2242 EXPORT_SYMBOL(__cpu_online_mask); 2243 2244 struct cpumask __cpu_present_mask __read_mostly; 2245 EXPORT_SYMBOL(__cpu_present_mask); 2246 2247 struct cpumask __cpu_active_mask __read_mostly; 2248 EXPORT_SYMBOL(__cpu_active_mask); 2249 2250 void init_cpu_present(const struct cpumask *src) 2251 { 2252 cpumask_copy(&__cpu_present_mask, src); 2253 } 2254 2255 void init_cpu_possible(const struct cpumask *src) 2256 { 2257 cpumask_copy(&__cpu_possible_mask, src); 2258 } 2259 2260 void init_cpu_online(const struct cpumask *src) 2261 { 2262 cpumask_copy(&__cpu_online_mask, src); 2263 } 2264 2265 /* 2266 * Activate the first processor. 2267 */ 2268 void __init boot_cpu_init(void) 2269 { 2270 int cpu = smp_processor_id(); 2271 2272 /* Mark the boot cpu "present", "online" etc for SMP and UP case */ 2273 set_cpu_online(cpu, true); 2274 set_cpu_active(cpu, true); 2275 set_cpu_present(cpu, true); 2276 set_cpu_possible(cpu, true); 2277 2278 #ifdef CONFIG_SMP 2279 __boot_cpu_id = cpu; 2280 #endif 2281 } 2282 2283 /* 2284 * Must be called _AFTER_ setting up the per_cpu areas 2285 */ 2286 void __init boot_cpu_hotplug_init(void) 2287 { 2288 #ifdef CONFIG_SMP 2289 this_cpu_write(cpuhp_state.booted_once, true); 2290 #endif 2291 this_cpu_write(cpuhp_state.state, CPUHP_ONLINE); 2292 } 2293