On 11.11.21 10:55, Pavel Dovgalyuk wrote: > 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; > + } > #if !defined(CONFIG_USER_ONLY) > if (replay_mode == REPLAY_MODE_PLAY && !replay_has_interrupt()) { > /* Do nothing */ >
Reviewed-by: David Hildenbrand <da...@redhat.com> -- Thanks, David / dhildenb