Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc: Add struct smp_ops_t.cause_nmi_ipi operation

Have the NMI IPI code use this op when the platform defines it.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

authored by

Nicholas Piggin and committed by
Michael Ellerman
c64af645 ddd703ca

+10
+1
arch/powerpc/include/asm/smp.h
··· 42 42 #ifdef CONFIG_PPC_SMP_MUXED_IPI 43 43 void (*cause_ipi)(int cpu); 44 44 #endif 45 + int (*cause_nmi_ipi)(int cpu); 45 46 void (*probe)(void); 46 47 int (*kick_cpu)(int nr); 47 48 int (*prepare_cpu)(int nr);
+3
arch/powerpc/kernel/smp.c
··· 417 417 418 418 static void do_smp_send_nmi_ipi(int cpu) 419 419 { 420 + if (smp_ops->cause_nmi_ipi && smp_ops->cause_nmi_ipi(cpu)) 421 + return; 422 + 420 423 if (cpu >= 0) { 421 424 do_message_pass(cpu, PPC_MSG_NMI_IPI); 422 425 } else {
+1
arch/powerpc/platforms/85xx/smp.c
··· 344 344 } 345 345 346 346 struct smp_ops_t smp_85xx_ops = { 347 + .cause_nmi_ipi = NULL, 347 348 .kick_cpu = smp_85xx_kick_cpu, 348 349 .cpu_bootable = smp_generic_cpu_bootable, 349 350 #ifdef CONFIG_HOTPLUG_CPU
+1
arch/powerpc/platforms/86xx/mpc86xx_smp.c
··· 105 105 106 106 107 107 struct smp_ops_t smp_86xx_ops = { 108 + .cause_nmi_ipi = NULL, 108 109 .message_pass = smp_mpic_message_pass, 109 110 .probe = smp_mpic_probe, 110 111 .kick_cpu = smp_86xx_kick_cpu,
+1
arch/powerpc/platforms/chrp/smp.c
··· 44 44 45 45 /* CHRP with openpic */ 46 46 struct smp_ops_t chrp_smp_ops = { 47 + .cause_nmi_ipi = NULL, 47 48 .message_pass = smp_mpic_message_pass, 48 49 .probe = smp_mpic_probe, 49 50 .kick_cpu = smp_chrp_kick_cpu,
+1
arch/powerpc/platforms/powermac/smp.c
··· 447 447 struct smp_ops_t psurge_smp_ops = { 448 448 .message_pass = NULL, /* Use smp_muxed_ipi_message_pass */ 449 449 .cause_ipi = smp_psurge_cause_ipi, 450 + .cause_nmi_ipi = NULL, 450 451 .probe = smp_psurge_probe, 451 452 .kick_cpu = smp_psurge_kick_cpu, 452 453 .setup_cpu = smp_psurge_setup_cpu,
+1
arch/powerpc/platforms/powernv/smp.c
··· 302 302 static struct smp_ops_t pnv_smp_ops = { 303 303 .message_pass = NULL, /* Use smp_muxed_ipi_message_pass */ 304 304 .cause_ipi = NULL, /* Filled at runtime by pnv_smp_probe() */ 305 + .cause_nmi_ipi = NULL, 305 306 .probe = pnv_smp_probe, 306 307 .prepare_cpu = pnv_smp_prepare_cpu, 307 308 .kick_cpu = pnv_smp_kick_cpu,
+1
arch/powerpc/platforms/pseries/smp.c
··· 202 202 static struct smp_ops_t pseries_smp_ops = { 203 203 .message_pass = NULL, /* Use smp_muxed_ipi_message_pass */ 204 204 .cause_ipi = NULL, /* Filled at runtime by pSeries_smp_probe() */ 205 + .cause_nmi_ipi = NULL, 205 206 .probe = pSeries_smp_probe, 206 207 .kick_cpu = smp_pSeries_kick_cpu, 207 208 .setup_cpu = smp_setup_cpu,