smp: Consolidate smp_prepare_boot_cpu()
authorThomas Gleixner <tglx@linutronix.de>
Mon, 4 Mar 2024 10:12:22 +0000 (11:12 +0100)
committerIngo Molnar <mingo@kernel.org>
Mon, 4 Mar 2024 11:01:54 +0000 (12:01 +0100)
There is no point in having seven architectures implementing the same empty
stub.

Provide a weak function in the init code and remove the stubs.

This also allows to utilize the function on UP which is required to
sanitize the per CPU handling on X86 UP.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20240304005104.567671691@linutronix.de
arch/alpha/kernel/smp.c
arch/arc/kernel/smp.c
arch/csky/kernel/smp.c
arch/hexagon/kernel/smp.c
arch/openrisc/kernel/smp.c
arch/riscv/kernel/smpboot.c
arch/sparc/kernel/smp_64.c
arch/x86/include/asm/smp.h
arch/x86/kernel/smpboot.c
include/linux/smp.h
init/main.c

index 7439b2377df5799e371669faa7cc96229dadca38..8e9dd63b220c68f1f9cbb4cfa470192900ea10f2 100644 (file)
@@ -467,11 +467,6 @@ smp_prepare_cpus(unsigned int max_cpus)
        smp_num_cpus = smp_num_probed;
 }
 
-void
-smp_prepare_boot_cpu(void)
-{
-}
-
 int
 __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
index 8d9b188caa27bcd965cd3f94a6a4a4739657c97d..b2f2c59279a6799ad89daf3ce709b8d010915920 100644 (file)
@@ -39,11 +39,6 @@ struct plat_smp_ops  __weak plat_smp_ops;
 /* XXX: per cpu ? Only needed once in early secondary boot */
 struct task_struct *secondary_idle_tsk;
 
-/* Called from start_kernel */
-void __init smp_prepare_boot_cpu(void)
-{
-}
-
 static int __init arc_get_cpu_map(const char *name, struct cpumask *cpumask)
 {
        unsigned long dt_root = of_get_flat_dt_root();
index 8e42352cbf123f4bc771dfefda013bf12d818cfa..92dbbf3e0205b61bb9b89697750e501a22747390 100644 (file)
@@ -152,10 +152,6 @@ void arch_irq_work_raise(void)
 }
 #endif
 
-void __init smp_prepare_boot_cpu(void)
-{
-}
-
 void __init smp_prepare_cpus(unsigned int max_cpus)
 {
 }
index 608884bc3396763eefcc4dc44896322a89da6763..65e1fdf9fdb21d730c36675d0ffdac287db8252f 100644 (file)
@@ -114,10 +114,6 @@ void send_ipi(const struct cpumask *cpumask, enum ipi_message_type msg)
        local_irq_restore(flags);
 }
 
-void __init smp_prepare_boot_cpu(void)
-{
-}
-
 /*
  * interrupts should already be disabled from the VM
  * SP should already be correct; need to set THREADINFO_REG
index 1c5a2d71d6753e8a02a8903712c163802e56891c..86da4bc5ee0bbeb7fbc2a36a3275a271624feffe 100644 (file)
@@ -57,10 +57,6 @@ static void boot_secondary(unsigned int cpu, struct task_struct *idle)
        spin_unlock(&boot_lock);
 }
 
-void __init smp_prepare_boot_cpu(void)
-{
-}
-
 void __init smp_init_cpus(void)
 {
        struct device_node *cpu;
index 519b6bd946e5d1b69edf3379e31b345e38a03deb..c4ed7d977f57b2c305e5ecbf2b767fd9b0c175df 100644 (file)
 
 static DECLARE_COMPLETION(cpu_running);
 
-void __init smp_prepare_boot_cpu(void)
-{
-}
-
 void __init smp_prepare_cpus(unsigned int max_cpus)
 {
        int cpuid;
index f3969a3600dbfe4931a18d95da4e2ee8fb53503f..a0cc9bb41a921cb3acd74c50a40f663bc042f2e3 100644 (file)
@@ -1206,10 +1206,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 {
 }
 
-void smp_prepare_boot_cpu(void)
-{
-}
-
 void __init smp_setup_processor_id(void)
 {
        if (tlb_type == spitfire)
index 4fab2ed454f3ab86a636ec9d2ac1ed682d1de624..31edeab5ee88fa03c84c208c119824127f33fd0a 100644 (file)
@@ -59,11 +59,6 @@ static inline void stop_other_cpus(void)
        smp_ops.stop_other_cpus(1);
 }
 
-static inline void smp_prepare_boot_cpu(void)
-{
-       smp_ops.smp_prepare_boot_cpu();
-}
-
 static inline void smp_prepare_cpus(unsigned int max_cpus)
 {
        smp_ops.smp_prepare_cpus(max_cpus);
index 3f57ce68a3f1ec9c6fe742c08a008d89f65f3f97..980782bd2c976f380caad08d1a0442874b32bb25 100644 (file)
@@ -1187,6 +1187,11 @@ void __init smp_prepare_cpus_common(void)
        set_cpu_sibling_map(0);
 }
 
+void __init smp_prepare_boot_cpu(void)
+{
+       smp_ops.smp_prepare_boot_cpu();
+}
+
 #ifdef CONFIG_X86_64
 /* Establish whether parallel bringup can be supported. */
 bool __init arch_cpuhp_init_parallel_bringup(void)
index e87520dc2959dd9bd047ed2740945fd20bf7fd9a..b84592950149e20409151e3fd02eec692bee8842 100644 (file)
@@ -105,6 +105,12 @@ static inline void on_each_cpu_cond(smp_cond_func_t cond_func,
        on_each_cpu_cond_mask(cond_func, func, info, wait, cpu_online_mask);
 }
 
+/*
+ * Architecture specific boot CPU setup.  Defined as empty weak function in
+ * init/main.c. Architectures can override it.
+ */
+void smp_prepare_boot_cpu(void);
+
 #ifdef CONFIG_SMP
 
 #include <linux/preempt.h>
@@ -171,12 +177,6 @@ void generic_smp_call_function_single_interrupt(void);
 #define generic_smp_call_function_interrupt \
        generic_smp_call_function_single_interrupt
 
-/*
- * Mark the boot cpu "online" so that it can call console drivers in
- * printk() and can access its per-cpu storage.
- */
-void smp_prepare_boot_cpu(void);
-
 extern unsigned int setup_max_cpus;
 extern void __init setup_nr_cpu_ids(void);
 extern void __init smp_init(void);
@@ -203,7 +203,6 @@ static inline void up_smp_call_function(smp_call_func_t func, void *info)
                        (up_smp_call_function(func, info))
 
 static inline void smp_send_reschedule(int cpu) { }
-#define smp_prepare_boot_cpu()                 do {} while (0)
 #define smp_call_function_many(mask, func, info, wait) \
                        (up_smp_call_function(func, info))
 static inline void call_function_init(void) { }
index e24b0780fdff7a807bd027ab26e61fc303c624ef..d60bc4b23dd47024bd66c8b04f1217bd374b2c80 100644 (file)
@@ -776,6 +776,10 @@ void __init __weak smp_setup_processor_id(void)
 {
 }
 
+void __init __weak smp_prepare_boot_cpu(void)
+{
+}
+
 # if THREAD_SIZE >= PAGE_SIZE
 void __init __weak thread_stack_cache_init(void)
 {