2 * 31-bit switch cpu code
4 * Copyright IBM Corp. 2009
8 #include <asm/asm-offsets.h>
9 #include <asm/ptrace.h>
11 # smp_switch_to_cpu switches to destination cpu and executes the passed function
12 # Parameter: %r2 - function to call
13 # %r3 - function parameter
16 # %r6 - destination cpu
20 .globl smp_switch_to_cpu
22 stm %r6,%r15,__SF_GPRS(%r15)
24 ahi %r15,-STACK_FRAME_OVERHEAD
25 st %r1,__SF_BACKCHAIN(%r15)
27 0: la %r1,.gprregs_addr-0b(%r13)
30 1: sigp %r0,%r6,__SIGP_RESTART /* start destination CPU */
31 brc 2,1b /* busy, try again */
32 2: sigp %r0,%r5,__SIGP_STOP /* stop current CPU */
33 brc 2,2b /* busy, try again */
36 .globl smp_restart_cpu
39 0: la %r1,.gprregs_addr-0b(%r13)
42 1: sigp %r0,%r5,__SIGP_SENSE /* Wait for calling CPU */
43 brc 10,1b /* busy, accepted (status 0), running */
44 tmll %r0,0x40 /* Test if calling CPU is stopped */
46 ltr %r4,%r4 /* New stack ? */
49 1: lr %r14,%r2 /* r14: Function to call */
50 lr %r2,%r3 /* r2 : Parameter for function*/
51 basr %r14,%r14 /* Call function */
56 .section .data,"aw",@progbits