diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2005-04-12 11:04:15 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2005-10-29 19:31:04 +0100 |
commit | 6dd04688520d7abe4883b2a79fa720291d76b140 (patch) | |
tree | 4d64b3bcad2b840ea6b8586ad018ea4077671c69 | |
parent | ac5d8c022f91d790888cc8c627b8010d3c31a300 (diff) | |
download | linux-3.10-6dd04688520d7abe4883b2a79fa720291d76b140.tar.gz linux-3.10-6dd04688520d7abe4883b2a79fa720291d76b140.tar.bz2 linux-3.10-6dd04688520d7abe4883b2a79fa720291d76b140.zip |
When simulating ll/sc compute the return EPC before modifying the
registers.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | arch/mips/kernel/traps.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index f9a6a566555..77f796b9975 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -408,9 +408,10 @@ static inline void simulate_ll(struct pt_regs *regs, unsigned int opcode) preempt_enable(); + compute_return_epc(regs); + regs->regs[(opcode & RT) >> 16] = value; - compute_return_epc(regs); return; sig: @@ -459,9 +460,9 @@ static inline void simulate_sc(struct pt_regs *regs, unsigned int opcode) goto sig; } + compute_return_epc(regs); regs->regs[reg] = 1; - compute_return_epc(regs); return; sig: |