aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/traps.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2005-04-12 07:04:15 -0400
committerRalf Baechle <ralf@linux-mips.org>2005-10-29 14:31:04 -0400
commit6dd04688520d7abe4883b2a79fa720291d76b140 (patch)
tree4d64b3bcad2b840ea6b8586ad018ea4077671c69 /arch/mips/kernel/traps.c
parentac5d8c022f91d790888cc8c627b8010d3c31a300 (diff)
When simulating ll/sc compute the return EPC before modifying the
registers. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/traps.c')
-rw-r--r--arch/mips/kernel/traps.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index f9a6a5665559..77f796b9975e 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)
408 408
409 preempt_enable(); 409 preempt_enable();
410 410
411 compute_return_epc(regs);
412
411 regs->regs[(opcode & RT) >> 16] = value; 413 regs->regs[(opcode & RT) >> 16] = value;
412 414
413 compute_return_epc(regs);
414 return; 415 return;
415 416
416sig: 417sig:
@@ -459,9 +460,9 @@ static inline void simulate_sc(struct pt_regs *regs, unsigned int opcode)
459 goto sig; 460 goto sig;
460 } 461 }
461 462
463 compute_return_epc(regs);
462 regs->regs[reg] = 1; 464 regs->regs[reg] = 1;
463 465
464 compute_return_epc(regs);
465 return; 466 return;
466 467
467sig: 468sig: