diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-07-19 16:48:21 (GMT) |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-07-28 10:11:52 (GMT) |
commit | 81783786d5cf4aa0d3e15bb0fac856aa8ebf1a76 (patch) | |
tree | ea1266df42b055ef03df4f3937f6c6b4326bafc7 /arch/arm/kernel/entry-common.S | |
parent | 0a267fa6a15d41c4061358bf2e67c633fdbffc90 (diff) | |
download | linux-81783786d5cf4aa0d3e15bb0fac856aa8ebf1a76.tar.xz |
ARM: 7473/1: deal with handlerless restarts without leaving the kernel
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/entry-common.S')
-rw-r--r-- | arch/arm/kernel/entry-common.S | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 1873f65..8ae58c47 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -54,7 +54,11 @@ work_pending: mov r0, sp @ 'regs' mov r2, why @ 'syscall' bl do_work_pending - b no_work_pending + tst r0, #1 + beq no_work_pending + ldmia sp, {r0 - r6} @ have to reload r0 - r6 + b local_restart @ ... and off we go + /* * "slow" syscall return path. "why" tells us if this was a real syscall. */ @@ -396,6 +400,7 @@ ENTRY(vector_swi) eor scno, scno, #__NR_SYSCALL_BASE @ check OS number #endif +local_restart: ldr r10, [tsk, #TI_FLAGS] @ check for syscall tracing stmdb sp!, {r4, r5} @ push fifth and sixth args |