diff options
| -rw-r--r-- | arch/powerpc/kernel/entry_32.S | 7 | ||||
| -rw-r--r-- | arch/powerpc/kernel/entry_64.S | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index eb8d01bae8c6..973577f2141c 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
| @@ -365,6 +365,13 @@ syscall_dotrace_cont: | |||
| 365 | blrl /* Call handler */ | 365 | blrl /* Call handler */ |
| 366 | .globl ret_from_syscall | 366 | .globl ret_from_syscall |
| 367 | ret_from_syscall: | 367 | ret_from_syscall: |
| 368 | #ifdef CONFIG_DEBUG_RSEQ | ||
| 369 | /* Check whether the syscall is issued inside a restartable sequence */ | ||
| 370 | stw r3,GPR3(r1) | ||
| 371 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
| 372 | bl rseq_syscall | ||
| 373 | lwz r3,GPR3(r1) | ||
| 374 | #endif | ||
| 368 | mr r6,r3 | 375 | mr r6,r3 |
| 369 | CURRENT_THREAD_INFO(r12, r1) | 376 | CURRENT_THREAD_INFO(r12, r1) |
| 370 | /* disable interrupts so current_thread_info()->flags can't change */ | 377 | /* disable interrupts so current_thread_info()->flags can't change */ |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 51695608c68b..1c374387656a 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
| @@ -184,6 +184,14 @@ system_call: /* label this so stack traces look sane */ | |||
| 184 | 184 | ||
| 185 | .Lsyscall_exit: | 185 | .Lsyscall_exit: |
| 186 | std r3,RESULT(r1) | 186 | std r3,RESULT(r1) |
| 187 | |||
| 188 | #ifdef CONFIG_DEBUG_RSEQ | ||
| 189 | /* Check whether the syscall is issued inside a restartable sequence */ | ||
| 190 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
| 191 | bl rseq_syscall | ||
| 192 | ld r3,RESULT(r1) | ||
| 193 | #endif | ||
| 194 | |||
| 187 | CURRENT_THREAD_INFO(r12, r1) | 195 | CURRENT_THREAD_INFO(r12, r1) |
| 188 | 196 | ||
| 189 | ld r8,_MSR(r1) | 197 | ld r8,_MSR(r1) |
