When simulating ll/sc compute the return EPC before modifying the
registers. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@@ -408,9 +408,10 @@ static inline void simulate_ll(struct pt_regs *regs, unsigned int opcode)
|
|||||||
|
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
|
||||||
|
compute_return_epc(regs);
|
||||||
|
|
||||||
regs->regs[(opcode & RT) >> 16] = value;
|
regs->regs[(opcode & RT) >> 16] = value;
|
||||||
|
|
||||||
compute_return_epc(regs);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sig:
|
sig:
|
||||||
@@ -459,9 +460,9 @@ static inline void simulate_sc(struct pt_regs *regs, unsigned int opcode)
|
|||||||
goto sig;
|
goto sig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compute_return_epc(regs);
|
||||||
regs->regs[reg] = 1;
|
regs->regs[reg] = 1;
|
||||||
|
|
||||||
compute_return_epc(regs);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sig:
|
sig:
|
||||||
|
Reference in New Issue
Block a user