diff --git a/arch/arc/core/smp.c b/arch/arc/core/smp.c index 6bc89883fad..767c463180d 100644 --- a/arch/arc/core/smp.c +++ b/arch/arc/core/smp.c @@ -39,7 +39,7 @@ volatile char *arc_cpu_sp; volatile _cpu_t *_curr_cpu[CONFIG_MP_MAX_NUM_CPUS]; /* Called from Zephyr initialization */ -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { _curr_cpu[cpu_num] = &(_kernel.cpus[cpu_num]); @@ -114,7 +114,7 @@ void arch_secondary_cpu_init(int cpu_num) DT_IRQ(DT_NODELABEL(ici), priority), 0); irq_enable(DT_IRQN(DT_NODELABEL(ici))); #endif - /* call the function set by arch_start_cpu */ + /* call the function set by arch_cpu_start */ fn = arc_cpu_init[cpu_num].fn; fn(arc_cpu_init[cpu_num].arg); diff --git a/arch/arm/core/cortex_a_r/smp.c b/arch/arm/core/cortex_a_r/smp.c index f581c770310..85a8650d02f 100644 --- a/arch/arm/core/cortex_a_r/smp.c +++ b/arch/arm/core/cortex_a_r/smp.c @@ -90,7 +90,7 @@ extern int z_arm_mmu_init(void); #endif /* Called from Zephyr initialization */ -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { int cpu_count, i, j; uint32_t cpu_mpid = 0; diff --git a/arch/arm64/core/smp.c b/arch/arm64/core/smp.c index 76ccd770908..3413a578025 100644 --- a/arch/arm64/core/smp.c +++ b/arch/arm64/core/smp.c @@ -62,7 +62,7 @@ static uint64_t cpu_map[CONFIG_MP_MAX_NUM_CPUS] = { extern void z_arm64_mm_init(bool is_primary_core); /* Called from Zephyr initialization */ -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { int cpu_count; diff --git a/arch/riscv/core/smp.c b/arch/riscv/core/smp.c index 54de29c0551..fe9f349f6bc 100644 --- a/arch/riscv/core/smp.c +++ b/arch/riscv/core/smp.c @@ -27,7 +27,7 @@ extern void __start(void); void soc_interrupt_init(void); #endif -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { riscv_cpu_init[cpu_num].fn = fn; diff --git a/arch/x86/core/intel64/cpu.c b/arch/x86/core/intel64/cpu.c index 2a845960b87..f5b3af53fad 100644 --- a/arch/x86/core/intel64/cpu.c +++ b/arch/x86/core/intel64/cpu.c @@ -138,7 +138,7 @@ struct x86_cpuboot x86_cpuboot[] = { * will enter the kernel at fn(arg), running on the specified stack. */ -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { #if CONFIG_MP_MAX_NUM_CPUS > 1 diff --git a/doc/kernel/services/smp/smp.rst b/doc/kernel/services/smp/smp.rst index 0a94ed022b0..ca1e0149ad5 100644 --- a/doc/kernel/services/smp/smp.rst +++ b/doc/kernel/services/smp/smp.rst @@ -132,7 +132,7 @@ happens on a single CPU before other CPUs are brought online. Just before entering the application :c:func:`main` function, the kernel calls :c:func:`z_smp_init` to launch the SMP initialization process. This enumerates over the configured CPUs, calling into the architecture -layer using :c:func:`arch_start_cpu` for each one. This function is +layer using :c:func:`arch_cpu_start` for each one. This function is passed a memory region to use as a stack on the foreign CPU (in practice it uses the area that will become that CPU's interrupt stack), the address of a local :c:func:`smp_init_top` callback function to diff --git a/doc/kernel/services/smp/smpinit.svg b/doc/kernel/services/smp/smpinit.svg index 13227081b0c..7495df78316 100644 Binary files a/doc/kernel/services/smp/smpinit.svg and b/doc/kernel/services/smp/smpinit.svg differ diff --git a/doc/releases/migration-guide-3.7.rst b/doc/releases/migration-guide-3.7.rst index 8dce89635fb..5e22815348c 100644 --- a/doc/releases/migration-guide-3.7.rst +++ b/doc/releases/migration-guide-3.7.rst @@ -196,6 +196,8 @@ Userspace Architectures ************* +* Function :c:func:`arch_start_cpu` has been renamed to :c:func:`arch_cpu_start`. + * x86 * Kconfigs ``CONFIG_DISABLE_SSBD`` and ``CONFIG_ENABLE_EXTENDED_IBRS`` diff --git a/include/zephyr/arch/arch_interface.h b/include/zephyr/arch/arch_interface.h index 9faa9df005f..d7ff2f2cad2 100644 --- a/include/zephyr/arch/arch_interface.h +++ b/include/zephyr/arch/arch_interface.h @@ -238,7 +238,7 @@ typedef void (*arch_cpustart_t)(void *data); * @param fn Function to begin running on the CPU. * @param arg Untyped argument to be passed to "fn" */ -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg); /** diff --git a/kernel/smp.c b/kernel/smp.c index ed28ced68f3..6b5a12ad2af 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -156,7 +156,7 @@ static void start_cpu(int id, struct cpu_start_cb *csc) (void)atomic_clear(&ready_flag); /* Power up the CPU */ - arch_start_cpu(id, z_interrupt_stacks[id], CONFIG_ISR_STACK_SIZE, + arch_cpu_start(id, z_interrupt_stacks[id], CONFIG_ISR_STACK_SIZE, smp_init_top, csc); /* Wait until the newly powered up CPU to signal that diff --git a/soc/espressif/esp32/esp32-mp.c b/soc/espressif/esp32/esp32-mp.c index 7922e6f18cd..c5ec588ea09 100644 --- a/soc/espressif/esp32/esp32-mp.c +++ b/soc/espressif/esp32/esp32-mp.c @@ -243,7 +243,7 @@ IRAM_ATTR static void esp_crosscore_isr(void *arg) } } -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { volatile struct cpustart_rec sr; diff --git a/soc/intel/intel_adsp/common/multiprocessing.c b/soc/intel/intel_adsp/common/multiprocessing.c index cf33ad990e1..ff49b61188d 100644 --- a/soc/intel/intel_adsp/common/multiprocessing.c +++ b/soc/intel/intel_adsp/common/multiprocessing.c @@ -107,7 +107,7 @@ static __imr void __used z_mp_entry(void) soc_mp_startup(start_rec.cpu); soc_cpus_active[start_rec.cpu] = true; start_rec.fn(start_rec.arg); - __ASSERT(false, "arch_start_cpu() handler should never return"); + __ASSERT(false, "arch_cpu_start() handler should never return"); } void mp_resume_entry(void) @@ -120,7 +120,7 @@ bool arch_cpu_active(int cpu_num) return soc_cpus_active[cpu_num]; } -void arch_start_cpu(int cpu_num, k_thread_stack_t *stack, int sz, +void arch_cpu_start(int cpu_num, k_thread_stack_t *stack, int sz, arch_cpustart_t fn, void *arg) { __ASSERT_NO_MSG(!soc_cpus_active[cpu_num]); diff --git a/tests/kernel/mp/src/main.c b/tests/kernel/mp/src/main.c index baec544f20a..ed00d1601f9 100644 --- a/tests/kernel/mp/src/main.c +++ b/tests/kernel/mp/src/main.c @@ -76,7 +76,7 @@ FUNC_NORETURN void cpu_fn(void *arg) * * Test Procedure: * -# In main thread, given and set a global variable cpu_arg to 12345. - * -# Call arch_start_cpu() with parameters + * -# Call arch_cpu_start() with parameters * -# Enter a while loop and wait for cpu_running equals to 1. * -# In target function, check if the address is &cpu_arg and its content * equal to 12345. @@ -94,7 +94,7 @@ FUNC_NORETURN void cpu_fn(void *arg) * - This test using for the platform that support MP or SMP, in our current * scenario which own over two CPUs. * - * @see arch_start_cpu() + * @see arch_cpu_start() */ ZTEST(multiprocessing, test_mp_start) { @@ -105,7 +105,7 @@ ZTEST(multiprocessing, test_mp_start) cpu_arg = 12345 * i; - arch_start_cpu(i, cpu_stacks[i], CPU_STACK_SIZE, cpu_fn, &cpu_arg); + arch_cpu_start(i, cpu_stacks[i], CPU_STACK_SIZE, cpu_fn, &cpu_arg); /* Wait for about 5 (500 * 10ms) seconds for CPU to start. */ wait_count = 500; diff --git a/tests/kernel/spinlock/src/main.c b/tests/kernel/spinlock/src/main.c index ddd53eca4e2..1e5de11ff00 100644 --- a/tests/kernel/spinlock/src/main.c +++ b/tests/kernel/spinlock/src/main.c @@ -122,7 +122,7 @@ static void cpu1_fn(void *p1, void *p2, void *p3) * * @ingroup kernel_spinlock_tests * - * @see arch_start_cpu() + * @see arch_cpu_start() */ ZTEST(spinlock, test_spinlock_bounce) {