#define CPU_MMU_OFF (-1) #define CPU_BOOT_SUCCESS (0) /* The cpu invoked ops->cpu_die, synchronise it with cpu_kill */ #define CPU_KILL_ME (1) /* The cpu couldn't die gracefully and is looping in the kernel */ #define CPU_STUCK_IN_KERNEL (2) /* Fatal system error detected by secondary CPU, crash the system */ #define CPU_PANIC_KERNEL (3)
/* * Discover the set of possible CPUs and determine their * SMP operations.
*/ externvoid smp_init_cpus(void);
enum ipi_msg_type {
IPI_RESCHEDULE,
IPI_CALL_FUNC,
IPI_CPU_STOP,
IPI_CPU_STOP_NMI,
IPI_TIMER,
IPI_IRQ_WORK,
NR_IPI, /* * Any enum >= NR_IPI and < MAX_IPI is special and not tracable * with trace_ipi_*
*/
IPI_CPU_BACKTRACE = NR_IPI,
IPI_KGDB_ROUNDUP,
MAX_IPI
};
/* * Register IPI interrupts with the arch SMP code
*/ externvoid set_smp_ipi_range_percpu(int ipi_base, int nr_ipi, int ncpus);
staticinlinevoid set_smp_ipi_range(int ipi_base, int n)
{
set_smp_ipi_range_percpu(ipi_base, n, 0);
}
/* * Called from the secondary holding pen, this is the secondary CPU entry point.
*/
asmlinkage void secondary_start_kernel(void);
/* * Initial data for bringing up a secondary CPU. * @status - Result passed back from the secondary CPU to * indicate failure.
*/ struct secondary_data { struct task_struct *task; long status;
};
staticinlinevoid update_cpu_boot_status(int val)
{
WRITE_ONCE(secondary_data.status, val); /* Ensure the visibility of the status update */
dsb(ishst);
}
/* * The calling secondary CPU has detected serious configuration mismatch, * which calls for a kernel panic. Update the boot status and park the calling * CPU.
*/ staticinlinevoid __noreturn cpu_panic_kernel(void)
{
update_cpu_boot_status(CPU_PANIC_KERNEL);
cpu_park_loop();
}
/* * If a secondary CPU enters the kernel but fails to come online, * (e.g. due to mismatched features), and cannot exit the kernel, * we increment cpus_stuck_in_kernel and leave the CPU in a * quiesecent loop within the kernel text. The memory containing * this loop must not be re-used for anything else as the 'stuck' * core is executing it. * * This function is used to inhibit features like kexec and hibernate.
*/ bool cpus_are_stuck_in_kernel(void);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.