Commit 39f87561 authored by Michael Ellerman's avatar Michael Ellerman

powerpc/smp: Move ppc_md.cpu_die() to smp_ops.cpu_offline_self()

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: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200819015634.1974478-3-mpe@ellerman.id.au
parent bf3c1464
...@@ -65,7 +65,6 @@ struct machdep_calls { ...@@ -65,7 +65,6 @@ struct machdep_calls {
void __noreturn (*restart)(char *cmd); void __noreturn (*restart)(char *cmd);
void __noreturn (*halt)(void); void __noreturn (*halt)(void);
void (*panic)(char *str); void (*panic)(char *str);
void (*cpu_die)(void);
long (*time_init)(void); /* Optional, may be NULL */ long (*time_init)(void); /* Optional, may be NULL */
......
...@@ -50,6 +50,9 @@ struct smp_ops_t { ...@@ -50,6 +50,9 @@ struct smp_ops_t {
int (*cpu_disable)(void); int (*cpu_disable)(void);
void (*cpu_die)(unsigned int nr); void (*cpu_die)(unsigned int nr);
int (*cpu_bootable)(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); extern int smp_send_nmi_ipi(int cpu, void (*fn)(struct pt_regs *), u64 delay_us);
......
...@@ -1499,8 +1499,8 @@ void arch_cpu_idle_dead(void) ...@@ -1499,8 +1499,8 @@ void arch_cpu_idle_dead(void)
*/ */
this_cpu_disable_ftrace(); this_cpu_disable_ftrace();
if (ppc_md.cpu_die) if (smp_ops->cpu_offline_self)
ppc_md.cpu_die(); smp_ops->cpu_offline_self();
/* If we return, we re-enter start_secondary */ /* If we return, we re-enter start_secondary */
start_secondary_resume(); start_secondary_resume();
......
...@@ -1160,6 +1160,7 @@ static int __init topology_init(void) ...@@ -1160,6 +1160,7 @@ static int __init topology_init(void)
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
struct cpu *c = &per_cpu(cpu_devices, cpu); struct cpu *c = &per_cpu(cpu_devices, cpu);
#ifdef CONFIG_HOTPLUG_CPU
/* /*
* For now, we just see if the system supports making * For now, we just see if the system supports making
* the RTAS calls for CPU hotplug. But, there may be a * the RTAS calls for CPU hotplug. But, there may be a
...@@ -1167,8 +1168,9 @@ static int __init topology_init(void) ...@@ -1167,8 +1168,9 @@ static int __init topology_init(void)
* CPU. For instance, the boot cpu might never be valid * CPU. For instance, the boot cpu might never be valid
* for hotplugging. * for hotplugging.
*/ */
if (ppc_md.cpu_die) if (smp_ops->cpu_offline_self)
c->hotpluggable = 1; c->hotpluggable = 1;
#endif
if (cpu_online(cpu) || c->hotpluggable) { if (cpu_online(cpu) || c->hotpluggable) {
register_cpu(c, cpu); register_cpu(c, cpu);
......
...@@ -112,7 +112,7 @@ static void mpc85xx_take_timebase(void) ...@@ -112,7 +112,7 @@ static void mpc85xx_take_timebase(void)
local_irq_restore(flags); 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(); unsigned int cpu = smp_processor_id();
...@@ -506,7 +506,7 @@ void __init mpc85xx_smp_init(void) ...@@ -506,7 +506,7 @@ void __init mpc85xx_smp_init(void)
if (qoriq_pm_ops) { if (qoriq_pm_ops) {
smp_85xx_ops.give_timebase = mpc85xx_give_timebase; smp_85xx_ops.give_timebase = mpc85xx_give_timebase;
smp_85xx_ops.take_timebase = mpc85xx_take_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; smp_85xx_ops.cpu_die = qoriq_cpu_kill;
} }
#endif #endif
......
...@@ -34,7 +34,7 @@ extern void pmac_check_ht_link(void); ...@@ -34,7 +34,7 @@ extern void pmac_check_ht_link(void);
extern void pmac_setup_smp(void); extern void pmac_setup_smp(void);
extern int psurge_secondary_virq; 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 int pmac_nvram_init(void);
extern void pmac_pic_init(void); extern void pmac_pic_init(void);
......
...@@ -201,8 +201,8 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS) ...@@ -201,8 +201,8 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
addi r3,r3,sleep_storage@l addi r3,r3,sleep_storage@l
stw r5,0(r3) stw r5,0(r3)
.globl low_cpu_die .globl low_cpu_offline_self
low_cpu_die: low_cpu_offline_self:
/* Flush & disable all caches */ /* Flush & disable all caches */
bl flush_disable_caches bl flush_disable_caches
...@@ -244,7 +244,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_SPEC7450) ...@@ -244,7 +244,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_SPEC7450)
mtmsr r2 mtmsr r2
isync isync
b 1b b 1b
_ASM_NOKPROBE_SYMBOL(low_cpu_die) _ASM_NOKPROBE_SYMBOL(low_cpu_offline_self)
/* /*
* Here is the resume code. * Here is the resume code.
*/ */
......
...@@ -920,7 +920,7 @@ static int smp_core99_cpu_disable(void) ...@@ -920,7 +920,7 @@ static int smp_core99_cpu_disable(void)
#ifdef CONFIG_PPC32 #ifdef CONFIG_PPC32
static void pmac_cpu_die(void) static void pmac_cpu_offline_self(void)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
...@@ -930,12 +930,12 @@ static void pmac_cpu_die(void) ...@@ -930,12 +930,12 @@ static void pmac_cpu_die(void)
generic_set_cpu_dead(cpu); generic_set_cpu_dead(cpu);
smp_wmb(); smp_wmb();
mb(); mb();
low_cpu_die(); low_cpu_offline_self();
} }
#else /* CONFIG_PPC32 */ #else /* CONFIG_PPC32 */
static void pmac_cpu_die(void) static void pmac_cpu_offline_self(void)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
...@@ -1020,7 +1020,7 @@ void __init pmac_setup_smp(void) ...@@ -1020,7 +1020,7 @@ void __init pmac_setup_smp(void)
#endif /* CONFIG_PPC_PMAC32_PSURGE */ #endif /* CONFIG_PPC_PMAC32_PSURGE */
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
ppc_md.cpu_die = pmac_cpu_die; smp_ops->cpu_offline_self = pmac_cpu_offline_self;
#endif #endif
} }
......
...@@ -158,7 +158,7 @@ static void pnv_flush_interrupts(void) ...@@ -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 long srr1, unexpected_mask, wmask;
unsigned int cpu; unsigned int cpu;
...@@ -417,6 +417,7 @@ static struct smp_ops_t pnv_smp_ops = { ...@@ -417,6 +417,7 @@ static struct smp_ops_t pnv_smp_ops = {
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
.cpu_disable = pnv_smp_cpu_disable, .cpu_disable = pnv_smp_cpu_disable,
.cpu_die = generic_cpu_die, .cpu_die = generic_cpu_die,
.cpu_offline_self = pnv_cpu_offline_self,
#endif /* CONFIG_HOTPLUG_CPU */ #endif /* CONFIG_HOTPLUG_CPU */
}; };
...@@ -430,7 +431,6 @@ void __init pnv_smp_init(void) ...@@ -430,7 +431,6 @@ void __init pnv_smp_init(void)
smp_ops = &pnv_smp_ops; smp_ops = &pnv_smp_ops;
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
ppc_md.cpu_die = pnv_smp_cpu_kill_self;
#ifdef CONFIG_KEXEC_CORE #ifdef CONFIG_KEXEC_CORE
crash_wake_offline = 1; crash_wake_offline = 1;
#endif #endif
......
...@@ -55,7 +55,7 @@ static void rtas_stop_self(void) ...@@ -55,7 +55,7 @@ static void rtas_stop_self(void)
panic("Alas, I survived.\n"); 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(); unsigned int hwcpu = hard_smp_processor_id();
...@@ -102,7 +102,7 @@ static int pseries_cpu_disable(void) ...@@ -102,7 +102,7 @@ static int pseries_cpu_disable(void)
* to self-destroy so that the cpu-offline thread can send the CPU_DEAD * to self-destroy so that the cpu-offline thread can send the CPU_DEAD
* notifications. * 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. * self-destruct.
*/ */
static void pseries_cpu_die(unsigned int cpu) static void pseries_cpu_die(unsigned int cpu)
...@@ -901,7 +901,7 @@ static int __init pseries_cpu_hotplug_init(void) ...@@ -901,7 +901,7 @@ static int __init pseries_cpu_hotplug_init(void)
return 0; 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_disable = pseries_cpu_disable;
smp_ops->cpu_die = pseries_cpu_die; smp_ops->cpu_die = pseries_cpu_die;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment