summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiav Rehana <liavr@mellanox.com>2016-08-16 10:55:35 +0300
committerSasha Levin <alexander.levin@verizon.com>2016-08-31 19:21:09 -0400
commit35de4db88c800c40f46959709674089d9e07743b (patch)
tree8db0dc6500c211bd686b27d8d21fc8b136f6a9bb
parent0798bebd877549b60e56ab59bef5eac65c1c6ed6 (diff)
ARC: use correct offset in pt_regs for saving/restoring user mode r25
[ Upstream commit 86147e3cfa5e118b61e78f4f0bf29e920dcbd477 ] User mode callee regs are explicitly collected before signal delivery or breakpoint trap. r25 is special for kernel as it serves as task pointer, so user mode value is clobbered very early. It is saved in pt_regs where generally only scratch (aka caller saved) regs are saved. The code to access the corresponding pt_regs location had a subtle bug as it was using load/store with scaling of offset, whereas the offset was already byte wise correct. So fix this by replacing LD.AS with a standard LD Cc: <stable@vger.kernel.org> Signed-off-by: Liav Rehana <liavr@mellanox.com> Reviewed-by: Alexey Brodkin <abrodkin@synopsys.com> [vgupta: rewrote title and commit log] Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
-rw-r--r--arch/arc/include/asm/entry.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arc/include/asm/entry.h b/arch/arc/include/asm/entry.h
index 4549c3086caa..81cdbc36699b 100644
--- a/arch/arc/include/asm/entry.h
+++ b/arch/arc/include/asm/entry.h
@@ -160,7 +160,7 @@
#ifdef CONFIG_ARC_CURR_IN_REG
; Retrieve orig r25 and save it with rest of callee_regs
- ld.as r12, [r12, PT_user_r25]
+ ld r12, [r12, PT_user_r25]
PUSH r12
#else
PUSH r25
@@ -216,7 +216,7 @@
; SP is back to start of pt_regs
#ifdef CONFIG_ARC_CURR_IN_REG
- st.as r12, [sp, PT_user_r25]
+ st r12, [sp, PT_user_r25]
#endif
.endm