Lines Matching +full:inter +full:- +full:processor

1 // SPDX-License-Identifier: GPL-2.0-only
27 #include <linux/irqchip/arm-gic-v3.h>
51 #include <asm/processor.h>
78 #define get_ipi_desc(__cpu, __ipi) (per_cpu_ptr(&pcpu_ipi_desc, __cpu)->descs[__ipi])
92 return -ENOSYS; in op_cpu_kill()
105 if (ops->cpu_boot) in boot_secondary()
106 return ops->cpu_boot(cpu); in boot_secondary()
108 return -EOPNOTSUPP; in boot_secondary()
128 if (ret != -EPERM) in __cpu_up()
164 pr_crit("CPU%u: does not support 52-bit VAs\n", cpu); in __cpu_up()
175 return -EIO; in __cpu_up()
209 current->active_mm = mm; in secondary_start_kernel()
231 if (ops->cpu_postboot) in secondary_start_kernel()
232 ops->cpu_postboot(); in secondary_start_kernel()
254 pr_info("CPU%u: Booted secondary processor 0x%010lx [0x%08x]\n", in secondary_start_kernel()
285 if (!ops || !ops->cpu_die) in op_cpu_disable()
286 return -EOPNOTSUPP; in op_cpu_disable()
289 * We may need to abort a hot unplug for some other mechanism-specific in op_cpu_disable()
292 if (ops->cpu_disable) in op_cpu_disable()
293 return ops->cpu_disable(cpu); in op_cpu_disable()
299 * __cpu_disable runs on the processor to be shutdown.
321 * OK - migrate IRQs away from this CPU in __cpu_disable()
337 if (!ops->cpu_kill) in op_cpu_kill()
340 return ops->cpu_kill(cpu); in op_cpu_kill()
355 * in-kernel synchronisation, try to get the firmware to help us to in arch_cpuhp_cleanup_dead_cpu()
385 ops->cpu_die(cpu); in cpu_die()
396 if (ops && ops->cpu_die) in __cpu_try_die()
397 ops->cpu_die(cpu); in __cpu_try_die()
452 * The runtime per-cpu areas have been allocated by in smp_prepare_boot_cpu()
453 * setup_per_cpu_areas(), and CPU0's boot time per-cpu area will be in smp_prepare_boot_cpu()
454 * freed shortly, so we must move over to the runtime per-cpu area. in smp_prepare_boot_cpu()
495 return -ENODEV; in smp_cpu_setup()
498 if (ops->cpu_init(cpu)) in smp_cpu_setup()
499 return -ENODEV; in smp_cpu_setup()
516 return -EPROBE_DEFER; in arch_register_cpu()
522 return -ENODEV; in arch_register_cpu()
530 c->hotpluggable = arch_cpu_is_hotpluggable(cpu); in arch_register_cpu()
563 return acpi_cpu_get_madt_gicc(cpu)->flags & ACPI_MADT_ENABLED; in acpi_cpu_is_present()
567 * acpi_map_gic_cpu_interface - parse processor MADT entry
569 * Carry out sanity checks on MADT processor entry and initialize
573 acpi_map_gic_cpu_interface(struct acpi_madt_generic_interrupt *processor) in acpi_map_gic_cpu_interface() argument
575 u64 hwid = processor->arm_mpidr; in acpi_map_gic_cpu_interface()
577 if (!(processor->flags & in acpi_map_gic_cpu_interface()
601 cpu_madt_gicc[0] = *processor; in acpi_map_gic_cpu_interface()
611 cpu_madt_gicc[cpu_count] = *processor; in acpi_map_gic_cpu_interface()
614 * Set-up the ACPI parking protocol cpu entries in acpi_map_gic_cpu_interface()
622 acpi_set_mailbox_entry(cpu_count, processor); in acpi_map_gic_cpu_interface()
631 struct acpi_madt_generic_interrupt *processor; in acpi_parse_gic_cpu_interface() local
633 processor = (struct acpi_madt_generic_interrupt *)header; in acpi_parse_gic_cpu_interface()
634 if (BAD_MADT_GICC_ENTRY(processor, end)) in acpi_parse_gic_cpu_interface()
635 return -EINVAL; in acpi_parse_gic_cpu_interface()
637 acpi_table_print_madt_entry(&header->common); in acpi_parse_gic_cpu_interface()
639 acpi_map_gic_cpu_interface(processor); in acpi_parse_gic_cpu_interface()
717 * the enable-method so continue without in of_parse_and_init_cpus()
762 pr_warn("Number of cores (%d) exceeds configured maximum of %u - clipping\n", in smp_init_cpus()
766 * the cpus so that cpu processor description entries (DT cpu nodes in smp_init_cpus()
769 * If the cpu set-up fails, invalidate the cpu_logical_map entry. in smp_init_cpus()
814 err = ops->cpu_prepare(cpu); in smp_prepare_cpus()
844 seq_printf(p, "%*s%u: ", prec - 1, "IPI", i); in arch_show_interrupts()
872 * arm64_nmi_cpu_stop() - stop the local CPU after it is told to stop.
882 * - the regular IPI_CPU_STOP and pseudo-NMI IPI_CPU_STOP_NMI handlers;
883 * - panic_smp_self_stop(), a CPU parking itself on a parallel panic();
884 * - the SDEI cross-CPU NMI handler (drivers/firmware/arm_sdei_nmi.c),
891 * a CPU_OFF from that not-yet-completed context wedges EL3 on some firmware --
892 * a documented follow-up. Parking also matches this path's own fallback when
902 * that pseudo-NMIs are disabled. The "stop" code starts with an IRQ in arm64_nmi_cpu_stop()
957 * Prefer the SDEI cross-CPU NMI provider when active: firmware in arch_trigger_cpumask_backtrace()
959 * interrupts locally masked, without the per-IRQ-mask cost that in arch_trigger_cpumask_backtrace()
960 * pseudo-NMI pays for the same reach. The plain IPI path below in arch_trigger_cpumask_backtrace()
961 * can't reach such a CPU unless pseudo-NMI is enabled. in arch_trigger_cpumask_backtrace()
992 * Main handler for inter-processor interrupts
1050 unsigned int ipi = (irq - ipi_irq_base) % nr_ipi; in ipi_handler()
1213 return num_online_cpus() - this_cpu_online; in num_other_online_cpus()
1242 * - If a CPU comes online as we're running, we'll likely notice it in smp_send_stop()
1244 * with an NMI (assuming NMIs are enabled) since we re-snapshot the in smp_send_stop()
1246 * - If we leave the function and see that CPUs are still online we'll in smp_send_stop()
1265 while (num_other_online_cpus() && timeout--) in smp_send_stop()
1282 while (num_other_online_cpus() && timeout--) in smp_send_stop()
1287 * If CPUs are *still* online, try the SDEI cross-CPU NMI. Firmware in smp_send_stop()
1290 * could (without pseudo-NMI there is no NMI rung at all). Allow in smp_send_stop()
1291 * 100ms: a firmware round-trip per CPU, with headroom. in smp_send_stop()
1294 /* re-snapshot after the rungs above took CPUs offline */ in smp_send_stop()
1304 while (num_other_online_cpus() && timeout--) in smp_send_stop()
1352 if (ops && ops->cpu_die) in have_cpu_die()