diff options
| -rw-r--r-- | arch/powerpc/kernel/entry_64.S | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index e6d52845854f..e0bcf9354286 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
| @@ -57,12 +57,18 @@ system_call_common: | |||
| 57 | beq- 1f | 57 | beq- 1f |
| 58 | ld r1,PACAKSAVE(r13) | 58 | ld r1,PACAKSAVE(r13) |
| 59 | 1: std r10,0(r1) | 59 | 1: std r10,0(r1) |
| 60 | crclr so | ||
| 61 | std r11,_NIP(r1) | 60 | std r11,_NIP(r1) |
| 62 | std r12,_MSR(r1) | 61 | std r12,_MSR(r1) |
| 63 | std r0,GPR0(r1) | 62 | std r0,GPR0(r1) |
| 64 | std r10,GPR1(r1) | 63 | std r10,GPR1(r1) |
| 65 | ACCOUNT_CPU_USER_ENTRY(r10, r11) | 64 | ACCOUNT_CPU_USER_ENTRY(r10, r11) |
| 65 | /* | ||
| 66 | * This "crclr so" clears CR0.SO, which is the error indication on | ||
| 67 | * return from this system call. There must be no cmp instruction | ||
| 68 | * between it and the "mfcr r9" below, otherwise if XER.SO is set, | ||
| 69 | * CR0.SO will get set, causing all system calls to appear to fail. | ||
| 70 | */ | ||
| 71 | crclr so | ||
| 66 | std r2,GPR2(r1) | 72 | std r2,GPR2(r1) |
| 67 | std r3,GPR3(r1) | 73 | std r3,GPR3(r1) |
| 68 | std r4,GPR4(r1) | 74 | std r4,GPR4(r1) |
