powerpc/smp: Move ppc_md.cpu_die() to smp_ops.cpu_offline_self()
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 19 Aug 2020 01:56:34 +0000 (11:56 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 18 Sep 2020 09:59:43 +0000 (19:59 +1000)
We have smp_ops->cpu_die() and ppc_md.cpu_die(). One of them offlines
the current CPU and one offlines another CPU, can you guess which is
which? Also one is in smp_ops and one is in ppc_md?

So rename ppc_md.cpu_die(), to cpu_offline_self(), because that's what
it does. And move it into smp_ops where it belongs.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200819015634.1974478-3-mpe@ellerman.id.au
arch/powerpc/include/asm/machdep.h
arch/powerpc/include/asm/smp.h
arch/powerpc/kernel/smp.c
arch/powerpc/kernel/sysfs.c
arch/powerpc/platforms/85xx/smp.c
arch/powerpc/platforms/powermac/pmac.h
arch/powerpc/platforms/powermac/sleep.S
arch/powerpc/platforms/powermac/smp.c
arch/powerpc/platforms/powernv/smp.c
arch/powerpc/platforms/pseries/hotplug-cpu.c

index 5082cd4..9508107 100644 (file)
@@ -65,7 +65,6 @@ struct machdep_calls {
        void __noreturn (*restart)(char *cmd);
        void __noreturn (*halt)(void);
        void            (*panic)(char *str);
-       void            (*cpu_die)(void);
 
        long            (*time_init)(void); /* Optional, may be NULL */
 
index 0bf80c5..635bdf9 100644 (file)
@@ -50,6 +50,9 @@ struct smp_ops_t {
        int   (*cpu_disable)(void);
        void  (*cpu_die)(unsigned int nr);
        int   (*cpu_bootable)(unsigned int nr);
+#ifdef CONFIG_HOTPLUG_CPU
+       void  (*cpu_offline_self)(void);
+#endif
 };
 
 extern int smp_send_nmi_ipi(int cpu, void (*fn)(struct pt_regs *), u64 delay_us);
index 4ae767c..58990ba 100644 (file)
@@ -1499,8 +1499,8 @@ void arch_cpu_idle_dead(void)
         */
        this_cpu_disable_ftrace();
 
-       if (ppc_md.cpu_die)
-               ppc_md.cpu_die();
+       if (smp_ops->cpu_offline_self)
+               smp_ops->cpu_offline_self();
 
        /* If we return, we re-enter start_secondary */
        start_secondary_resume();
index 5dea98f..928b29e 100644 (file)
@@ -1160,6 +1160,7 @@ static int __init topology_init(void)
        for_each_possible_cpu(cpu) {
                struct cpu *c = &per_cpu(cpu_devices, cpu);
 
+#ifdef CONFIG_HOTPLUG_CPU
                /*
                 * For now, we just see if the system supports making
                 * the RTAS calls for CPU hotplug.  But, there may be a
@@ -1167,8 +1168,9 @@ static int __init topology_init(void)
                 * CPU.  For instance, the boot cpu might never be valid
                 * for hotplugging.
                 */
-               if (ppc_md.cpu_die)
+               if (smp_ops->cpu_offline_self)
                        c->hotpluggable = 1;
+#endif
 
                if (cpu_online(cpu) || c->hotpluggable) {
                        register_cpu(c, cpu);
index fda108b..c6df294 100644 (file)
@@ -112,7 +112,7 @@ static void mpc85xx_take_timebase(void)
        local_irq_restore(flags);
 }
 
-static void smp_85xx_mach_cpu_die(void)
+static void smp_85xx_cpu_offline_self(void)
 {
        unsigned int cpu = smp_processor_id();
 
@@ -506,7 +506,7 @@ void __init mpc85xx_smp_init(void)
        if (qoriq_pm_ops) {
                smp_85xx_ops.give_timebase = mpc85xx_give_timebase;
                smp_85xx_ops.take_timebase = mpc85xx_take_timebase;
-               ppc_md.cpu_die = smp_85xx_mach_cpu_die;
+               smp_85xx_ops.cpu_offline_self = smp_85xx_cpu_offline_self;
                smp_85xx_ops.cpu_die = qoriq_cpu_kill;
        }
 #endif
index 16a52af..0d715db 100644 (file)
@@ -34,7 +34,7 @@ extern void pmac_check_ht_link(void);
 
 extern void pmac_setup_smp(void);
 extern int psurge_secondary_virq;
-extern void low_cpu_die(void) __attribute__((noreturn));
+extern void low_cpu_offline_self(void) __attribute__((noreturn));
 
 extern int pmac_nvram_init(void);
 extern void pmac_pic_init(void);
index 51bfdfe..7e0f8ba 100644 (file)
@@ -201,8 +201,8 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
        addi r3,r3,sleep_storage@l
        stw r5,0(r3)
 
-       .globl  low_cpu_die
-low_cpu_die:
+       .globl  low_cpu_offline_self
+low_cpu_offline_self:
        /* Flush & disable all caches */
        bl      flush_disable_caches
 
@@ -244,7 +244,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_SPEC7450)
        mtmsr   r2
        isync
        b       1b
-_ASM_NOKPROBE_SYMBOL(low_cpu_die)
+_ASM_NOKPROBE_SYMBOL(low_cpu_offline_self)
 /*
  * Here is the resume code.
  */
index eb23264..a6fedcf 100644 (file)
@@ -920,7 +920,7 @@ static int smp_core99_cpu_disable(void)
 
 #ifdef CONFIG_PPC32
 
-static void pmac_cpu_die(void)
+static void pmac_cpu_offline_self(void)
 {
        int cpu = smp_processor_id();
 
@@ -930,12 +930,12 @@ static void pmac_cpu_die(void)
        generic_set_cpu_dead(cpu);
        smp_wmb();
        mb();
-       low_cpu_die();
+       low_cpu_offline_self();
 }
 
 #else /* CONFIG_PPC32 */
 
-static void pmac_cpu_die(void)
+static void pmac_cpu_offline_self(void)
 {
        int cpu = smp_processor_id();
 
@@ -1020,7 +1020,7 @@ void __init pmac_setup_smp(void)
 #endif /* CONFIG_PPC_PMAC32_PSURGE */
 
 #ifdef CONFIG_HOTPLUG_CPU
-       ppc_md.cpu_die = pmac_cpu_die;
+       smp_ops->cpu_offline_self = pmac_cpu_offline_self;
 #endif
 }
 
index bbf361f..54c4ba4 100644 (file)
@@ -158,7 +158,7 @@ static void pnv_flush_interrupts(void)
        }
 }
 
-static void pnv_smp_cpu_kill_self(void)
+static void pnv_cpu_offline_self(void)
 {
        unsigned long srr1, unexpected_mask, wmask;
        unsigned int cpu;
@@ -417,6 +417,7 @@ static struct smp_ops_t pnv_smp_ops = {
 #ifdef CONFIG_HOTPLUG_CPU
        .cpu_disable    = pnv_smp_cpu_disable,
        .cpu_die        = generic_cpu_die,
+       .cpu_offline_self = pnv_cpu_offline_self,
 #endif /* CONFIG_HOTPLUG_CPU */
 };
 
@@ -430,7 +431,6 @@ void __init pnv_smp_init(void)
        smp_ops = &pnv_smp_ops;
 
 #ifdef CONFIG_HOTPLUG_CPU
-       ppc_md.cpu_die  = pnv_smp_cpu_kill_self;
 #ifdef CONFIG_KEXEC_CORE
        crash_wake_offline = 1;
 #endif
index 7a974ed..f2837e3 100644 (file)
@@ -55,7 +55,7 @@ static void rtas_stop_self(void)
        panic("Alas, I survived.\n");
 }
 
-static void pseries_mach_cpu_die(void)
+static void pseries_cpu_offline_self(void)
 {
        unsigned int hwcpu = hard_smp_processor_id();
 
@@ -102,7 +102,7 @@ static int pseries_cpu_disable(void)
  * to self-destroy so that the cpu-offline thread can send the CPU_DEAD
  * notifications.
  *
- * OTOH, pseries_mach_cpu_die() is called by the @cpu when it wants to
+ * OTOH, pseries_cpu_offline_self() is called by the @cpu when it wants to
  * self-destruct.
  */
 static void pseries_cpu_die(unsigned int cpu)
@@ -901,7 +901,7 @@ static int __init pseries_cpu_hotplug_init(void)
                return 0;
        }
 
-       ppc_md.cpu_die = pseries_mach_cpu_die;
+       smp_ops->cpu_offline_self = pseries_cpu_offline_self;
        smp_ops->cpu_disable = pseries_cpu_disable;
        smp_ops->cpu_die = pseries_cpu_die;