linux/arch/arm64/kernel/smp.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * SMP initialisation and IPI support
   4 * Based on arch/arm/kernel/smp.c
   5 *
   6 * Copyright (C) 2012 ARM Ltd.
   7 */
   8
   9#include <linux/acpi.h>
  10#include <linux/arm_sdei.h>
  11#include <linux/delay.h>
  12#include <linux/init.h>
  13#include <linux/spinlock.h>
  14#include <linux/sched/mm.h>
  15#include <linux/sched/hotplug.h>
  16#include <linux/sched/task_stack.h>
  17#include <linux/interrupt.h>
  18#include <linux/cache.h>
  19#include <linux/profile.h>
  20#include <linux/errno.h>
  21#include <linux/mm.h>
  22#include <linux/err.h>
  23#include <linux/cpu.h>
  24#include <linux/smp.h>
  25#include <linux/seq_file.h>
  26#include <linux/irq.h>
  27#include <linux/irqchip/arm-gic-v3.h>
  28#include <linux/percpu.h>
  29#include <linux/clockchips.h>
  30#include <linux/completion.h>
  31#include <linux/of.h>
  32#include <linux/irq_work.h>
  33#include <linux/kexec.h>
  34#include <linux/kvm_host.h>
  35
  36#include <asm/alternative.h>
  37#include <asm/atomic.h>
  38#include <asm/cacheflush.h>
  39#include <asm/cpu.h>
  40#include <asm/cputype.h>
  41#include <asm/cpu_ops.h>
  42#include <asm/daifflags.h>
  43#include <asm/kvm_mmu.h>
  44#include <asm/mmu_context.h>
  45#include <asm/numa.h>
  46#include <asm/pgtable.h>
  47#include <asm/pgalloc.h>
  48#include <asm/processor.h>
  49#include <asm/smp_plat.h>
  50#include <asm/sections.h>
  51#include <asm/tlbflush.h>
  52#include <asm/ptrace.h>
  53#include <asm/virt.h>
  54
  55#define CREATE_TRACE_POINTS
  56#include <trace/events/ipi.h>
  57
  58DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number);
  59EXPORT_PER_CPU_SYMBOL(cpu_number);
  60
  61/*
  62 * as from 2.5, kernels no longer have an init_tasks structure
  63 * so we need some other way of telling a new secondary core
  64 * where to place its SVC stack
  65 */
  66struct secondary_data secondary_data;
  67/* Number of CPUs which aren't online, but looping in kernel text. */
  68int cpus_stuck_in_kernel;
  69
  70enum ipi_msg_type {
  71        IPI_RESCHEDULE,
  72        IPI_CALL_FUNC,
  73        IPI_CPU_STOP,
  74        IPI_CPU_CRASH_STOP,
  75        IPI_TIMER,
  76        IPI_IRQ_WORK,
  77        IPI_WAKEUP
  78};
  79
  80#ifdef CONFIG_HOTPLUG_CPU
  81static int op_cpu_kill(unsigned int cpu);
  82#else
  83static inline int op_cpu_kill(unsigned int cpu)
  84{
  85        return -ENOSYS;
  86}
  87#endif
  88
  89
  90/*
  91 * Boot a secondary CPU, and assign it the specified idle task.
  92 * This also gives us the initial stack to use for this CPU.
  93 */
  94static int boot_secondary(unsigned int cpu, struct task_struct *idle)
  95{
  96        if (cpu_ops[cpu]->cpu_boot)
  97                return cpu_ops[cpu]->cpu_boot(cpu);
  98
  99        return -EOPNOTSUPP;
 100}
 101
 102static DECLARE_COMPLETION(cpu_running);
 103
 104int __cpu_up(unsigned int cpu, struct task_struct *idle)
 105{
 106        int ret;
 107        long status;
 108
 109        /*
 110         * We need to tell the secondary core where to find its stack and the
 111         * page tables.
 112         */
 113        secondary_data.task = idle;
 114        secondary_data.stack = task_stack_page(idle) + THREAD_SIZE;
 115        update_cpu_boot_status(CPU_MMU_OFF);
 116        __flush_dcache_area(&secondary_data, sizeof(secondary_data));
 117
 118        /*
 119         * Now bring the CPU into our world.
 120         */
 121        ret = boot_secondary(cpu, idle);
 122        if (ret == 0) {
 123                /*
 124                 * CPU was successfully started, wait for it to come online or
 125                 * time out.
 126                 */
 127                wait_for_completion_timeout(&cpu_running,
 128                                            msecs_to_jiffies(5000));
 129
 130                if (!cpu_online(cpu)) {
 131                        pr_crit("CPU%u: failed to come online\n", cpu);
 132                        ret = -EIO;
 133                }
 134        } else {
 135                pr_err("CPU%u: failed to boot: %d\n", cpu, ret);
 136                return ret;
 137        }
 138
 139        secondary_data.task = NULL;
 140        secondary_data.stack = NULL;
 141        __flush_dcache_area(&secondary_data, sizeof(secondary_data));
 142        status = READ_ONCE(secondary_data.status);
 143        if (ret && status) {
 144
 145                if (status == CPU_MMU_OFF)
 146                        status = READ_ONCE(__early_cpu_boot_status);
 147
 148                switch (status & CPU_BOOT_STATUS_MASK) {
 149                default:
 150                        pr_err("CPU%u: failed in unknown state : 0x%lx\n",
 151                                        cpu, status);
 152                        cpus_stuck_in_kernel++;
 153                        break;
 154                case CPU_KILL_ME:
 155                        if (!op_cpu_kill(cpu)) {
 156                                pr_crit("CPU%u: died during early boot\n", cpu);
 157                                break;
 158                        }
 159                        pr_crit("CPU%u: may not have shut down cleanly\n", cpu);
 160                        /* Fall through */
 161                case CPU_STUCK_IN_KERNEL:
 162                        pr_crit("CPU%u: is stuck in kernel\n", cpu);
 163                        if (status & CPU_STUCK_REASON_52_BIT_VA)
 164                                pr_crit("CPU%u: does not support 52-bit VAs\n", cpu);
 165                        if (status & CPU_STUCK_REASON_NO_GRAN)
 166                                pr_crit("CPU%u: does not support %luK granule \n", cpu, PAGE_SIZE / SZ_1K);
 167                        cpus_stuck_in_kernel++;
 168                        break;
 169                case CPU_PANIC_KERNEL:
 170                        panic("CPU%u detected unsupported configuration\n", cpu);
 171                }
 172        }
 173
 174        return ret;
 175}
 176
 177static void init_gic_priority_masking(void)
 178{
 179        u32 cpuflags;
 180
 181        if (WARN_ON(!gic_enable_sre()))
 182                return;
 183
 184        cpuflags = read_sysreg(daif);
 185
 186        WARN_ON(!(cpuflags & PSR_I_BIT));
 187
 188        gic_write_pmr(GIC_PRIO_IRQON | GIC_PRIO_PSR_I_SET);
 189}
 190
 191/*
 192 * This is the secondary CPU boot entry.  We're using this CPUs
 193 * idle thread stack, but a set of temporary page tables.
 194 */
 195asmlinkage notrace void secondary_start_kernel(void)
 196{
 197        u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
 198        struct mm_struct *mm = &init_mm;
 199        unsigned int cpu;
 200
 201        cpu = task_cpu(current);
 202        set_my_cpu_offset(per_cpu_offset(cpu));
 203
 204        /*
 205         * All kernel threads share the same mm context; grab a
 206         * reference and switch to it.
 207         */
 208        mmgrab(mm);
 209        current->active_mm = mm;
 210
 211        /*
 212         * TTBR0 is only used for the identity mapping at this stage. Make it
 213         * point to zero page to avoid speculatively fetching new entries.
 214         */
 215        cpu_uninstall_idmap();
 216
 217        if (system_uses_irq_prio_masking())
 218                init_gic_priority_masking();
 219
 220        preempt_disable();
 221        trace_hardirqs_off();
 222
 223        /*
 224         * If the system has established the capabilities, make sure
 225         * this CPU ticks all of those. If it doesn't, the CPU will
 226         * fail to come online.
 227         */
 228        check_local_cpu_capabilities();
 229
 230        if (cpu_ops[cpu]->cpu_postboot)
 231                cpu_ops[cpu]->cpu_postboot();
 232
 233        /*
 234         * Log the CPU info before it is marked online and might get read.
 235         */
 236        cpuinfo_store_cpu();
 237
 238        /*
 239         * Enable GIC and timers.
 240         */
 241        notify_cpu_starting(cpu);
 242
 243        store_cpu_topology(cpu);
 244        numa_add_cpu(cpu);
 245
 246        /*
 247         * OK, now it's safe to let the boot CPU continue.  Wait for
 248         * the CPU migration code to notice that the CPU is online
 249         * before we continue.
 250         */
 251        pr_info("CPU%u: Booted secondary processor 0x%010lx [0x%08x]\n",
 252                                         cpu, (unsigned long)mpidr,
 253                                         read_cpuid_id());
 254        update_cpu_boot_status(CPU_BOOT_SUCCESS);
 255        set_cpu_online(cpu, true);
 256        complete(&cpu_running);
 257
 258        local_daif_restore(DAIF_PROCCTX);
 259
 260        /*
 261         * OK, it's off to the idle thread for us
 262         */
 263        cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
 264}
 265
 266#ifdef CONFIG_HOTPLUG_CPU
 267static int op_cpu_disable(unsigned int cpu)
 268{
 269        /*
 270         * If we don't have a cpu_die method, abort before we reach the point
 271         * of no return. CPU0 may not have an cpu_ops, so test for it.
 272         */
 273        if (!cpu_ops[cpu] || !cpu_ops[cpu]->cpu_die)
 274                return -EOPNOTSUPP;
 275
 276        /*
 277         * We may need to abort a hot unplug for some other mechanism-specific
 278         * reason.
 279         */
 280        if (cpu_ops[cpu]->cpu_disable)
 281                return cpu_ops[cpu]->cpu_disable(cpu);
 282
 283        return 0;
 284}
 285
 286/*
 287 * __cpu_disable runs on the processor to be shutdown.
 288 */
 289int __cpu_disable(void)
 290{
 291        unsigned int cpu = smp_processor_id();
 292        int ret;
 293
 294        ret = op_cpu_disable(cpu);
 295        if (ret)
 296                return ret;
 297
 298        remove_cpu_topology(cpu);
 299        numa_remove_cpu(cpu);
 300
 301        /*
 302         * Take this CPU offline.  Once we clear this, we can't return,
 303         * and we must not schedule until we're ready to give up the cpu.
 304         */
 305        set_cpu_online(cpu, false);
 306
 307        /*
 308         * OK - migrate IRQs away from this CPU
 309         */
 310        irq_migrate_all_off_this_cpu();
 311
 312        return 0;
 313}
 314
 315static int op_cpu_kill(unsigned int cpu)
 316{
 317        /*
 318         * If we have no means of synchronising with the dying CPU, then assume
 319         * that it is really dead. We can only wait for an arbitrary length of
 320         * time and hope that it's dead, so let's skip the wait and just hope.
 321         */
 322        if (!cpu_ops[cpu]->cpu_kill)
 323                return 0;
 324
 325        return cpu_ops[cpu]->cpu_kill(cpu);
 326}
 327
 328/*
 329 * called on the thread which is asking for a CPU to be shutdown -
 330 * waits until shutdown has completed, or it is timed out.
 331 */
 332void __cpu_die(unsigned int cpu)
 333{
 334        int err;
 335
 336        if (!cpu_wait_death(cpu, 5)) {
 337                pr_crit("CPU%u: cpu didn't die\n", cpu);
 338                return;
 339        }
 340        pr_notice("CPU%u: shutdown\n", cpu);
 341
 342        /*
 343         * Now that the dying CPU is beyond the point of no return w.r.t.
 344         * in-kernel synchronisation, try to get the firwmare to help us to
 345         * verify that it has really left the kernel before we consider
 346         * clobbering anything it might still be using.
 347         */
 348        err = op_cpu_kill(cpu);
 349        if (err)
 350                pr_warn("CPU%d may not have shut down cleanly: %d\n", cpu, err);
 351}
 352
 353/*
 354 * Called from the idle thread for the CPU which has been shutdown.
 355 *
 356 */
 357void cpu_die(void)
 358{
 359        unsigned int cpu = smp_processor_id();
 360
 361        idle_task_exit();
 362
 363        local_daif_mask();
 364
 365        /* Tell __cpu_die() that this CPU is now safe to dispose of */
 366        (void)cpu_report_death();
 367
 368        /*
 369         * Actually shutdown the CPU. This must never fail. The specific hotplug
 370         * mechanism must perform all required cache maintenance to ensure that
 371         * no dirty lines are lost in the process of shutting down the CPU.
 372         */
 373        cpu_ops[cpu]->cpu_die(cpu);
 374
 375        BUG();
 376}
 377#endif
 378
 379/*
 380 * Kill the calling secondary CPU, early in bringup before it is turned
 381 * online.
 382 */
 383void cpu_die_early(void)
 384{
 385        int cpu = smp_processor_id();
 386
 387        pr_crit("CPU%d: will not boot\n", cpu);
 388
 389        /* Mark this CPU absent */
 390        set_cpu_present(cpu, 0);
 391
 392#ifdef CONFIG_HOTPLUG_CPU
 393        update_cpu_boot_status(CPU_KILL_ME);
 394        /* Check if we can park ourselves */
 395        if (cpu_ops[cpu] && cpu_ops[cpu]->cpu_die)
 396                cpu_ops[cpu]->cpu_die(cpu);
 397#endif
 398        update_cpu_boot_status(CPU_STUCK_IN_KERNEL);
 399
 400        cpu_park_loop();
 401}
 402
 403static void __init hyp_mode_check(void)
 404{
 405        if (is_hyp_mode_available())
 406                pr_info("CPU: All CPU(s) started at EL2\n");
 407        else if (is_hyp_mode_mismatched())
 408                WARN_TAINT(1, TAINT_CPU_OUT_OF_SPEC,
 409                           "CPU: CPUs started in inconsistent modes");
 410        else
 411                pr_info("CPU: All CPU(s) started at EL1\n");
 412        if (IS_ENABLED(CONFIG_KVM_ARM_HOST))
 413                kvm_compute_layout();
 414}
 415
 416void __init smp_cpus_done(unsigned int max_cpus)
 417{
 418        pr_info("SMP: Total of %d processors activated.\n", num_online_cpus());
 419        setup_cpu_features();
 420        hyp_mode_check();
 421        apply_alternatives_all();
 422        mark_linear_text_alias_ro();
 423}
 424
 425void __init smp_prepare_boot_cpu(void)
 426{
 427        set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
 428        cpuinfo_store_boot_cpu();
 429
 430        /*
 431         * We now know enough about the boot CPU to apply the
 432         * alternatives that cannot wait until interrupt handling
 433         * and/or scheduling is enabled.
 434         */
 435        apply_boot_alternatives();
 436
 437        /* Conditionally switch to GIC PMR for interrupt masking */
 438        if (system_uses_irq_prio_masking())
 439                init_gic_priority_masking();
 440}
 441
 442static u64 __init of_get_cpu_mpidr(struct device_node *dn)
 443{
 444        const __be32 *cell;
 445        u64 hwid;
 446
 447        /*
 448         * A cpu node with missing "reg" property is
 449         * considered invalid to build a cpu_logical_map
 450         * entry.
 451         */
 452        cell = of_get_property(dn, "reg", NULL);
 453        if (!cell) {
 454                pr_err("%pOF: missing reg property\n", dn);
 455                return INVALID_HWID;
 456        }
 457
 458        hwid = of_read_number(cell, of_n_addr_cells(dn));
 459        /*
 460         * Non affinity bits must be set to 0 in the DT
 461         */
 462        if (hwid & ~MPIDR_HWID_BITMASK) {
 463                pr_err("%pOF: invalid reg property\n", dn);
 464                return INVALID_HWID;
 465        }
 466        return hwid;
 467}
 468
 469/*
 470 * Duplicate MPIDRs are a recipe for disaster. Scan all initialized
 471 * entries and check for duplicates. If any is found just ignore the
 472 * cpu. cpu_logical_map was initialized to INVALID_HWID to avoid
 473 * matching valid MPIDR values.
 474 */
 475static bool __init is_mpidr_duplicate(unsigned int cpu, u64 hwid)
 476{
 477        unsigned int i;
 478
 479        for (i = 1; (i < cpu) && (i < NR_CPUS); i++)
 480                if (cpu_logical_map(i) == hwid)
 481                        return true;
 482        return false;
 483}
 484
 485/*
 486 * Initialize cpu operations for a logical cpu and
 487 * set it in the possible mask on success
 488 */
 489static int __init smp_cpu_setup(int cpu)
 490{
 491        if (cpu_read_ops(cpu))
 492                return -ENODEV;
 493
 494        if (cpu_ops[cpu]->cpu_init(cpu))
 495                return -ENODEV;
 496
 497        set_cpu_possible(cpu, true);
 498
 499        return 0;
 500}
 501
 502static bool bootcpu_valid __initdata;
 503static unsigned int cpu_count = 1;
 504
 505#ifdef CONFIG_ACPI
 506static struct acpi_madt_generic_interrupt cpu_madt_gicc[NR_CPUS];
 507
 508struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu)
 509{
 510        return &cpu_madt_gicc[cpu];
 511}
 512
 513/*
 514 * acpi_map_gic_cpu_interface - parse processor MADT entry
 515 *
 516 * Carry out sanity checks on MADT processor entry and initialize
 517 * cpu_logical_map on success
 518 */
 519static void __init
 520acpi_map_gic_cpu_interface(struct acpi_madt_generic_interrupt *processor)
 521{
 522        u64 hwid = processor->arm_mpidr;
 523
 524        if (!(processor->flags & ACPI_MADT_ENABLED)) {
 525                pr_debug("skipping disabled CPU entry with 0x%llx MPIDR\n", hwid);
 526                return;
 527        }
 528
 529        if (hwid & ~MPIDR_HWID_BITMASK || hwid == INVALID_HWID) {
 530                pr_err("skipping CPU entry with invalid MPIDR 0x%llx\n", hwid);
 531                return;
 532        }
 533
 534        if (is_mpidr_duplicate(cpu_count, hwid)) {
 535                pr_err("duplicate CPU MPIDR 0x%llx in MADT\n", hwid);
 536                return;
 537        }
 538
 539        /* Check if GICC structure of boot CPU is available in the MADT */
 540        if (cpu_logical_map(0) == hwid) {
 541                if (bootcpu_valid) {
 542                        pr_err("duplicate boot CPU MPIDR: 0x%llx in MADT\n",
 543                               hwid);
 544                        return;
 545                }
 546                bootcpu_valid = true;
 547                cpu_madt_gicc[0] = *processor;
 548                return;
 549        }
 550
 551        if (cpu_count >= NR_CPUS)
 552                return;
 553
 554        /* map the logical cpu id to cpu MPIDR */
 555        cpu_logical_map(cpu_count) = hwid;
 556
 557        cpu_madt_gicc[cpu_count] = *processor;
 558
 559        /*
 560         * Set-up the ACPI parking protocol cpu entries
 561         * while initializing the cpu_logical_map to
 562         * avoid parsing MADT entries multiple times for
 563         * nothing (ie a valid cpu_logical_map entry should
 564         * contain a valid parking protocol data set to
 565         * initialize the cpu if the parking protocol is
 566         * the only available enable method).
 567         */
 568        acpi_set_mailbox_entry(cpu_count, processor);
 569
 570        cpu_count++;
 571}
 572
 573static int __init
 574acpi_parse_gic_cpu_interface(union acpi_subtable_headers *header,
 575                             const unsigned long end)
 576{
 577        struct acpi_madt_generic_interrupt *processor;
 578
 579        processor = (struct acpi_madt_generic_interrupt *)header;
 580        if (BAD_MADT_GICC_ENTRY(processor, end))
 581                return -EINVAL;
 582
 583        acpi_table_print_madt_entry(&header->common);
 584
 585        acpi_map_gic_cpu_interface(processor);
 586
 587        return 0;
 588}
 589
 590static void __init acpi_parse_and_init_cpus(void)
 591{
 592        int i;
 593
 594        /*
 595         * do a walk of MADT to determine how many CPUs
 596         * we have including disabled CPUs, and get information
 597         * we need for SMP init.
 598         */
 599        acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT,
 600                                      acpi_parse_gic_cpu_interface, 0);
 601
 602        /*
 603         * In ACPI, SMP and CPU NUMA information is provided in separate
 604         * static tables, namely the MADT and the SRAT.
 605         *
 606         * Thus, it is simpler to first create the cpu logical map through
 607         * an MADT walk and then map the logical cpus to their node ids
 608         * as separate steps.
 609         */
 610        acpi_map_cpus_to_nodes();
 611
 612        for (i = 0; i < nr_cpu_ids; i++)
 613                early_map_cpu_to_node(i, acpi_numa_get_nid(i));
 614}
 615#else
 616#define acpi_parse_and_init_cpus(...)   do { } while (0)
 617#endif
 618
 619/*
 620 * Enumerate the possible CPU set from the device tree and build the
 621 * cpu logical map array containing MPIDR values related to logical
 622 * cpus. Assumes that cpu_logical_map(0) has already been initialized.
 623 */
 624static void __init of_parse_and_init_cpus(void)
 625{
 626        struct device_node *dn;
 627
 628        for_each_of_cpu_node(dn) {
 629                u64 hwid = of_get_cpu_mpidr(dn);
 630
 631                if (hwid == INVALID_HWID)
 632                        goto next;
 633
 634                if (is_mpidr_duplicate(cpu_count, hwid)) {
 635                        pr_err("%pOF: duplicate cpu reg properties in the DT\n",
 636                                dn);
 637                        goto next;
 638                }
 639
 640                /*
 641                 * The numbering scheme requires that the boot CPU
 642                 * must be assigned logical id 0. Record it so that
 643                 * the logical map built from DT is validated and can
 644                 * be used.
 645                 */
 646                if (hwid == cpu_logical_map(0)) {
 647                        if (bootcpu_valid) {
 648                                pr_err("%pOF: duplicate boot cpu reg property in DT\n",
 649                                        dn);
 650                                goto next;
 651                        }
 652
 653                        bootcpu_valid = true;
 654                        early_map_cpu_to_node(0, of_node_to_nid(dn));
 655
 656                        /*
 657                         * cpu_logical_map has already been
 658                         * initialized and the boot cpu doesn't need
 659                         * the enable-method so continue without
 660                         * incrementing cpu.
 661                         */
 662                        continue;
 663                }
 664
 665                if (cpu_count >= NR_CPUS)
 666                        goto next;
 667
 668                pr_debug("cpu logical map 0x%llx\n", hwid);
 669                cpu_logical_map(cpu_count) = hwid;
 670
 671                early_map_cpu_to_node(cpu_count, of_node_to_nid(dn));
 672next:
 673                cpu_count++;
 674        }
 675}
 676
 677/*
 678 * Enumerate the possible CPU set from the device tree or ACPI and build the
 679 * cpu logical map array containing MPIDR values related to logical
 680 * cpus. Assumes that cpu_logical_map(0) has already been initialized.
 681 */
 682void __init smp_init_cpus(void)
 683{
 684        int i;
 685
 686        if (acpi_disabled)
 687                of_parse_and_init_cpus();
 688        else
 689                acpi_parse_and_init_cpus();
 690
 691        if (cpu_count > nr_cpu_ids)
 692                pr_warn("Number of cores (%d) exceeds configured maximum of %u - clipping\n",
 693                        cpu_count, nr_cpu_ids);
 694
 695        if (!bootcpu_valid) {
 696                pr_err("missing boot CPU MPIDR, not enabling secondaries\n");
 697                return;
 698        }
 699
 700        /*
 701         * We need to set the cpu_logical_map entries before enabling
 702         * the cpus so that cpu processor description entries (DT cpu nodes
 703         * and ACPI MADT entries) can be retrieved by matching the cpu hwid
 704         * with entries in cpu_logical_map while initializing the cpus.
 705         * If the cpu set-up fails, invalidate the cpu_logical_map entry.
 706         */
 707        for (i = 1; i < nr_cpu_ids; i++) {
 708                if (cpu_logical_map(i) != INVALID_HWID) {
 709                        if (smp_cpu_setup(i))
 710                                cpu_logical_map(i) = INVALID_HWID;
 711                }
 712        }
 713}
 714
 715void __init smp_prepare_cpus(unsigned int max_cpus)
 716{
 717        int err;
 718        unsigned int cpu;
 719        unsigned int this_cpu;
 720
 721        init_cpu_topology();
 722
 723        this_cpu = smp_processor_id();
 724        store_cpu_topology(this_cpu);
 725        numa_store_cpu_info(this_cpu);
 726        numa_add_cpu(this_cpu);
 727
 728        /*
 729         * If UP is mandated by "nosmp" (which implies "maxcpus=0"), don't set
 730         * secondary CPUs present.
 731         */
 732        if (max_cpus == 0)
 733                return;
 734
 735        /*
 736         * Initialise the present map (which describes the set of CPUs
 737         * actually populated at the present time) and release the
 738         * secondaries from the bootloader.
 739         */
 740        for_each_possible_cpu(cpu) {
 741
 742                per_cpu(cpu_number, cpu) = cpu;
 743
 744                if (cpu == smp_processor_id())
 745                        continue;
 746
 747                if (!cpu_ops[cpu])
 748                        continue;
 749
 750                err = cpu_ops[cpu]->cpu_prepare(cpu);
 751                if (err)
 752                        continue;
 753
 754                set_cpu_present(cpu, true);
 755                numa_store_cpu_info(cpu);
 756        }
 757}
 758
 759void (*__smp_cross_call)(const struct cpumask *, unsigned int);
 760
 761void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
 762{
 763        __smp_cross_call = fn;
 764}
 765
 766static const char *ipi_types[NR_IPI] __tracepoint_string = {
 767#define S(x,s)  [x] = s
 768        S(IPI_RESCHEDULE, "Rescheduling interrupts"),
 769        S(IPI_CALL_FUNC, "Function call interrupts"),
 770        S(IPI_CPU_STOP, "CPU stop interrupts"),
 771        S(IPI_CPU_CRASH_STOP, "CPU stop (for crash dump) interrupts"),
 772        S(IPI_TIMER, "Timer broadcast interrupts"),
 773        S(IPI_IRQ_WORK, "IRQ work interrupts"),
 774        S(IPI_WAKEUP, "CPU wake-up interrupts"),
 775};
 776
 777static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
 778{
 779        trace_ipi_raise(target, ipi_types[ipinr]);
 780        __smp_cross_call(target, ipinr);
 781}
 782
 783void show_ipi_list(struct seq_file *p, int prec)
 784{
 785        unsigned int cpu, i;
 786
 787        for (i = 0; i < NR_IPI; i++) {
 788                seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
 789                           prec >= 4 ? " " : "");
 790                for_each_online_cpu(cpu)
 791                        seq_printf(p, "%10u ",
 792                                   __get_irq_stat(cpu, ipi_irqs[i]));
 793                seq_printf(p, "      %s\n", ipi_types[i]);
 794        }
 795}
 796
 797u64 smp_irq_stat_cpu(unsigned int cpu)
 798{
 799        u64 sum = 0;
 800        int i;
 801
 802        for (i = 0; i < NR_IPI; i++)
 803                sum += __get_irq_stat(cpu, ipi_irqs[i]);
 804
 805        return sum;
 806}
 807
 808void arch_send_call_function_ipi_mask(const struct cpumask *mask)
 809{
 810        smp_cross_call(mask, IPI_CALL_FUNC);
 811}
 812
 813void arch_send_call_function_single_ipi(int cpu)
 814{
 815        smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC);
 816}
 817
 818#ifdef CONFIG_ARM64_ACPI_PARKING_PROTOCOL
 819void arch_send_wakeup_ipi_mask(const struct cpumask *mask)
 820{
 821        smp_cross_call(mask, IPI_WAKEUP);
 822}
 823#endif
 824
 825#ifdef CONFIG_IRQ_WORK
 826void arch_irq_work_raise(void)
 827{
 828        if (__smp_cross_call)
 829                smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
 830}
 831#endif
 832
 833static void local_cpu_stop(void)
 834{
 835        set_cpu_online(smp_processor_id(), false);
 836
 837        local_daif_mask();
 838        sdei_mask_local_cpu();
 839        cpu_park_loop();
 840}
 841
 842/*
 843 * We need to implement panic_smp_self_stop() for parallel panic() calls, so
 844 * that cpu_online_mask gets correctly updated and smp_send_stop() can skip
 845 * CPUs that have already stopped themselves.
 846 */
 847void panic_smp_self_stop(void)
 848{
 849        local_cpu_stop();
 850}
 851
 852#ifdef CONFIG_KEXEC_CORE
 853static atomic_t waiting_for_crash_ipi = ATOMIC_INIT(0);
 854#endif
 855
 856static void ipi_cpu_crash_stop(unsigned int cpu, struct pt_regs *regs)
 857{
 858#ifdef CONFIG_KEXEC_CORE
 859        crash_save_cpu(regs, cpu);
 860
 861        atomic_dec(&waiting_for_crash_ipi);
 862
 863        local_irq_disable();
 864        sdei_mask_local_cpu();
 865
 866#ifdef CONFIG_HOTPLUG_CPU
 867        if (cpu_ops[cpu]->cpu_die)
 868                cpu_ops[cpu]->cpu_die(cpu);
 869#endif
 870
 871        /* just in case */
 872        cpu_park_loop();
 873#endif
 874}
 875
 876/*
 877 * Main handler for inter-processor interrupts
 878 */
 879void handle_IPI(int ipinr, struct pt_regs *regs)
 880{
 881        unsigned int cpu = smp_processor_id();
 882        struct pt_regs *old_regs = set_irq_regs(regs);
 883
 884        if ((unsigned)ipinr < NR_IPI) {
 885                trace_ipi_entry_rcuidle(ipi_types[ipinr]);
 886                __inc_irq_stat(cpu, ipi_irqs[ipinr]);
 887        }
 888
 889        switch (ipinr) {
 890        case IPI_RESCHEDULE:
 891                scheduler_ipi();
 892                break;
 893
 894        case IPI_CALL_FUNC:
 895                irq_enter();
 896                generic_smp_call_function_interrupt();
 897                irq_exit();
 898                break;
 899
 900        case IPI_CPU_STOP:
 901                irq_enter();
 902                local_cpu_stop();
 903                irq_exit();
 904                break;
 905
 906        case IPI_CPU_CRASH_STOP:
 907                if (IS_ENABLED(CONFIG_KEXEC_CORE)) {
 908                        irq_enter();
 909                        ipi_cpu_crash_stop(cpu, regs);
 910
 911                        unreachable();
 912                }
 913                break;
 914
 915#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
 916        case IPI_TIMER:
 917                irq_enter();
 918                tick_receive_broadcast();
 919                irq_exit();
 920                break;
 921#endif
 922
 923#ifdef CONFIG_IRQ_WORK
 924        case IPI_IRQ_WORK:
 925                irq_enter();
 926                irq_work_run();
 927                irq_exit();
 928                break;
 929#endif
 930
 931#ifdef CONFIG_ARM64_ACPI_PARKING_PROTOCOL
 932        case IPI_WAKEUP:
 933                WARN_ONCE(!acpi_parking_protocol_valid(cpu),
 934                          "CPU%u: Wake-up IPI outside the ACPI parking protocol\n",
 935                          cpu);
 936                break;
 937#endif
 938
 939        default:
 940                pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr);
 941                break;
 942        }
 943
 944        if ((unsigned)ipinr < NR_IPI)
 945                trace_ipi_exit_rcuidle(ipi_types[ipinr]);
 946        set_irq_regs(old_regs);
 947}
 948
 949void smp_send_reschedule(int cpu)
 950{
 951        smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE);
 952}
 953
 954#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
 955void tick_broadcast(const struct cpumask *mask)
 956{
 957        smp_cross_call(mask, IPI_TIMER);
 958}
 959#endif
 960
 961void smp_send_stop(void)
 962{
 963        unsigned long timeout;
 964
 965        if (num_online_cpus() > 1) {
 966                cpumask_t mask;
 967
 968                cpumask_copy(&mask, cpu_online_mask);
 969                cpumask_clear_cpu(smp_processor_id(), &mask);
 970
 971                if (system_state <= SYSTEM_RUNNING)
 972                        pr_crit("SMP: stopping secondary CPUs\n");
 973                smp_cross_call(&mask, IPI_CPU_STOP);
 974        }
 975
 976        /* Wait up to one second for other CPUs to stop */
 977        timeout = USEC_PER_SEC;
 978        while (num_online_cpus() > 1 && timeout--)
 979                udelay(1);
 980
 981        if (num_online_cpus() > 1)
 982                pr_warn("SMP: failed to stop secondary CPUs %*pbl\n",
 983                        cpumask_pr_args(cpu_online_mask));
 984
 985        sdei_mask_local_cpu();
 986}
 987
 988#ifdef CONFIG_KEXEC_CORE
 989void crash_smp_send_stop(void)
 990{
 991        static int cpus_stopped;
 992        cpumask_t mask;
 993        unsigned long timeout;
 994
 995        /*
 996         * This function can be called twice in panic path, but obviously
 997         * we execute this only once.
 998         */
 999        if (cpus_stopped)
1000                return;
1001
1002        cpus_stopped = 1;
1003
1004        if (num_online_cpus() == 1) {
1005                sdei_mask_local_cpu();
1006                return;
1007        }
1008
1009        cpumask_copy(&mask, cpu_online_mask);
1010        cpumask_clear_cpu(smp_processor_id(), &mask);
1011
1012        atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
1013
1014        pr_crit("SMP: stopping secondary CPUs\n");
1015        smp_cross_call(&mask, IPI_CPU_CRASH_STOP);
1016
1017        /* Wait up to one second for other CPUs to stop */
1018        timeout = USEC_PER_SEC;
1019        while ((atomic_read(&waiting_for_crash_ipi) > 0) && timeout--)
1020                udelay(1);
1021
1022        if (atomic_read(&waiting_for_crash_ipi) > 0)
1023                pr_warn("SMP: failed to stop secondary CPUs %*pbl\n",
1024                        cpumask_pr_args(&mask));
1025
1026        sdei_mask_local_cpu();
1027}
1028
1029bool smp_crash_stop_failed(void)
1030{
1031        return (atomic_read(&waiting_for_crash_ipi) > 0);
1032}
1033#endif
1034
1035/*
1036 * not supported here
1037 */
1038int setup_profiling_timer(unsigned int multiplier)
1039{
1040        return -EINVAL;
1041}
1042
1043static bool have_cpu_die(void)
1044{
1045#ifdef CONFIG_HOTPLUG_CPU
1046        int any_cpu = raw_smp_processor_id();
1047
1048        if (cpu_ops[any_cpu] && cpu_ops[any_cpu]->cpu_die)
1049                return true;
1050#endif
1051        return false;
1052}
1053
1054bool cpus_are_stuck_in_kernel(void)
1055{
1056        bool smp_spin_tables = (num_possible_cpus() > 1 && !have_cpu_die());
1057
1058        return !!cpus_stuck_in_kernel || smp_spin_tables;
1059}
1060