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

parisc: add __pdc_cpu_rendezvous()

When stopping SMP cpus send them into rendezvous, so we can
start them again later (when kexec'ing a new kernel).

Signed-off-by: Sven Schnelle <svens@stackframe.org>
Signed-off-by: Helge Deller <deller@gmx.de>

authored by

Sven Schnelle and committed by
Helge Deller
507efd63 08e69780

+15
+1
arch/parisc/include/asm/pdc.h
··· 91 91 unsigned long inptr, unsigned long outputr, 92 92 unsigned long glob_cfg); 93 93 94 + int __pdc_cpu_rendezvous(void); 94 95 static inline char * os_id_to_string(u16 os_id) { 95 96 switch(os_id) { 96 97 case OS_ID_NONE: return "No OS";
+13
arch/parisc/kernel/firmware.c
··· 312 312 } 313 313 314 314 /** 315 + * pdc_cpu_rendenzvous - Stop currently executing CPU 316 + * @retval: -1 on error, 0 on success 317 + */ 318 + int __pdc_cpu_rendezvous(void) 319 + { 320 + if (is_pdc_pat()) 321 + return mem_pdc_call(PDC_PAT_CPU, PDC_PAT_CPU_RENDEZVOUS); 322 + else 323 + return mem_pdc_call(PDC_PROC, 1, 0); 324 + } 325 + 326 + 327 + /** 315 328 * pdc_chassis_warn - Fetches chassis warnings 316 329 * @retval: -1 on error, 0 on success 317 330 */
+1
arch/parisc/kernel/smp.c
··· 109 109 /* REVISIT : does PM *know* this CPU isn't available? */ 110 110 set_cpu_online(smp_processor_id(), false); 111 111 local_irq_disable(); 112 + __pdc_cpu_rendezvous(); 112 113 for (;;) 113 114 ; 114 115 }