aboutsummaryrefslogtreecommitdiffstats
path: root/arch/hexagon/kernel/traps.c
diff options
context:
space:
mode:
authorRichard Kuo <rkuo@codeaurora.org>2012-05-29 17:23:14 -0500
committerRichard Kuo <rkuo@codeaurora.org>2013-04-30 19:40:24 -0500
commita11e67c2611d483622aad007a3533e7dfbea700e (patch)
treef54feb07c1f71d87fdf6aaf3b67b80c0ccff3f74 /arch/hexagon/kernel/traps.c
parentHexagon: add support for new v4+ registers (diff)
downloadlinux-dev-a11e67c2611d483622aad007a3533e7dfbea700e.tar.xz
linux-dev-a11e67c2611d483622aad007a3533e7dfbea700e.zip
Hexagon: Signal and return path fixes
This fixes the return value of sigreturn and moves the work pending check into a c routine for readability and fixes the loop for multiple pending signals. Based on feedback from Al Viro. Signed-off-by: Richard Kuo <rkuo@codeaurora.org>
Diffstat (limited to 'arch/hexagon/kernel/traps.c')
-rw-r--r--arch/hexagon/kernel/traps.c13
1 files changed, 1 insertions, 12 deletions
diff --git a/arch/hexagon/kernel/traps.c b/arch/hexagon/kernel/traps.c
index be5e2dd9c9d3..d59ee62f772d 100644
--- a/arch/hexagon/kernel/traps.c
+++ b/arch/hexagon/kernel/traps.c
@@ -356,7 +356,6 @@ long sys_syscall(void)
void do_trap0(struct pt_regs *regs)
{
- unsigned long syscallret = 0;
syscall_fn syscall;
switch (pt_cause(regs)) {
@@ -396,21 +395,11 @@ void do_trap0(struct pt_regs *regs)
} else {
syscall = (syscall_fn)
(sys_call_table[regs->syscall_nr]);
- syscallret = syscall(regs->r00, regs->r01,
+ regs->r00 = syscall(regs->r00, regs->r01,
regs->r02, regs->r03,
regs->r04, regs->r05);
}
- /*
- * If it was a sigreturn system call, don't overwrite
- * r0 value in stack frame with return value.
- *
- * __NR_sigreturn doesn't seem to exist in new unistd.h
- */
-
- if (regs->syscall_nr != __NR_rt_sigreturn)
- regs->r00 = syscallret;
-
/* allow strace to get the syscall return state */
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACE)))
tracehook_report_syscall_exit(regs, 0);