target/avr: Fix interrupt execution
authorIvanov Arkasha <ivanovrkasha@gmail.com>
Fri, 12 Mar 2021 16:47:54 +0000 (19:47 +0300)
committerPhilippe Mathieu-Daudé <f4bug@amsat.org>
Sun, 14 Mar 2021 23:39:52 +0000 (00:39 +0100)
Only one interrupt is in progress at the moment.
It is only necessary to set to reset interrupt_request
after all interrupts have been executed.

Signed-off-by: Ivanov Arkasha <ivanovrkasha@gmail.com>
Message-Id: <20210312164754.18437-1-arkaisp2021@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Michael Rolnik <mrolnik@gmail.com>
target/avr/helper.c

index b4532de25236bb3e5df889646aa7388bbbb0e88b..35e10195940426dee120a2c786e4e94cf0b77c7a 100644 (file)
@@ -49,7 +49,9 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
             cc->tcg_ops->do_interrupt(cs);
 
             env->intsrc &= env->intsrc - 1; /* clear the interrupt */
-            cs->interrupt_request &= ~CPU_INTERRUPT_HARD;
+            if (!env->intsrc) {
+                cs->interrupt_request &= ~CPU_INTERRUPT_HARD;
+            }
 
             ret = true;
         }