diff options
| author | Michael Holzheu <holzheu@linux.vnet.ibm.com> | 2011-04-04 03:43:30 -0400 |
|---|---|---|
| committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2011-04-04 03:43:32 -0400 |
| commit | 034e9e966cd86e5d8062cf0b3daba4bde187986c (patch) | |
| tree | 9c6c166b27e1662b11254940d039121537dcbd25 | |
| parent | 65a94b1417badaee2ed923fd07e23b651b25c729 (diff) | |
[S390] Fix parameter passing for smp_switch_to_cpu()
After the execution has been switched to the destination CPU, the target
function is called with the wrong parameter. According to the C calling
convention on s390, the first parameter should be loaded into register 2.
Currently in smp_restart_cpu() it is stored in register 3. To fix this, we
load the parameter into the correct register 2.
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| -rw-r--r-- | arch/s390/kernel/switch_cpu.S | 4 | ||||
| -rw-r--r-- | arch/s390/kernel/switch_cpu64.S | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/arch/s390/kernel/switch_cpu.S b/arch/s390/kernel/switch_cpu.S index 469f11b574fa..20530dd2eab1 100644 --- a/arch/s390/kernel/switch_cpu.S +++ b/arch/s390/kernel/switch_cpu.S | |||
| @@ -46,7 +46,9 @@ smp_restart_cpu: | |||
| 46 | ltr %r4,%r4 /* New stack ? */ | 46 | ltr %r4,%r4 /* New stack ? */ |
| 47 | jz 1f | 47 | jz 1f |
| 48 | lr %r15,%r4 | 48 | lr %r15,%r4 |
| 49 | 1: basr %r14,%r2 | 49 | 1: lr %r14,%r2 /* r14: Function to call */ |
| 50 | lr %r2,%r3 /* r2 : Parameter for function*/ | ||
| 51 | basr %r14,%r14 /* Call function */ | ||
| 50 | 52 | ||
| 51 | .gprregs_addr: | 53 | .gprregs_addr: |
| 52 | .long .gprregs | 54 | .long .gprregs |
diff --git a/arch/s390/kernel/switch_cpu64.S b/arch/s390/kernel/switch_cpu64.S index d94aacc898cb..5be3f43898f9 100644 --- a/arch/s390/kernel/switch_cpu64.S +++ b/arch/s390/kernel/switch_cpu64.S | |||
| @@ -42,7 +42,9 @@ smp_restart_cpu: | |||
| 42 | ltgr %r4,%r4 /* New stack ? */ | 42 | ltgr %r4,%r4 /* New stack ? */ |
| 43 | jz 1f | 43 | jz 1f |
| 44 | lgr %r15,%r4 | 44 | lgr %r15,%r4 |
| 45 | 1: basr %r14,%r2 | 45 | 1: lgr %r14,%r2 /* r14: Function to call */ |
| 46 | lgr %r2,%r3 /* r2 : Parameter for function*/ | ||
| 47 | basr %r14,%r14 /* Call function */ | ||
| 46 | 48 | ||
| 47 | .section .data,"aw",@progbits | 49 | .section .data,"aw",@progbits |
| 48 | .gprregs: | 50 | .gprregs: |
