When simulating ll/sc compute the return EPC before modifying the
authorRalf Baechle <ralf@linux-mips.org>
Tue, 12 Apr 2005 11:04:15 +0000 (11:04 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 29 Oct 2005 18:31:04 +0000 (19:31 +0100)
registers.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/traps.c

index f9a6a5665559f748c91afbdc8dd513349ee1bed8..77f796b9975e600a51bf7c5e592cf8e33d71aac5 100644 (file)
@@ -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: