Pavel Dovgalyuk <pavel.dovgal...@ispras.ru> writes:
> Watchpoint may be processed in two phases. First one is detecting > the instruction with target memory access. And the second one is > executing only one instruction and setting the debug interrupt flag. > Hardware interrupts can break this sequence when they happen after > the first watchpoint phase. > This patch postpones the interrupt request until watchpoint is > processed. > > Signed-off-by: Pavel Dovgalyuk <pavel.dovgal...@ispras.ru> > --- > accel/tcg/cpu-exec.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c > index df12452b8f..e4526c2f5e 100644 > --- a/accel/tcg/cpu-exec.c > +++ b/accel/tcg/cpu-exec.c > @@ -742,6 +742,11 @@ static inline bool cpu_handle_interrupt(CPUState *cpu, > qemu_mutex_unlock_iothread(); > return true; > } > + /* Process watchpoints first, or interrupts will ruin everything */ > + if (cpu->watchpoint_hit) { > + qemu_mutex_unlock_iothread(); > + return false; > + } side note: I wonder if it is time to wrap up the locks up with QEMU_LOCK_GUARD or something similar? Anyway seems reasonable: Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée