On Thu, Jul 2, 2015 at 3:52 PM, Dmitry Osipenko <dig...@gmail.com> wrote: > Timer fires interrupt regardless of current IT(interrupt enable) bit state. > Fix it by making timer to respect IT state. > > Signed-off-by: Dmitry Osipenko <dig...@gmail.com> > --- > hw/timer/arm_mptimer.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c > index 58e17c4..82c4462 100644 > --- a/hw/timer/arm_mptimer.c > +++ b/hw/timer/arm_mptimer.c > @@ -38,7 +38,7 @@ static inline int get_current_cpu(ARMMPTimerState *s) > > static inline void timerblock_update_irq(TimerBlock *tb) > { > - qemu_set_irq(tb->irq, tb->status); > + qemu_set_irq(tb->irq, tb->status && (tb->control & 4));
You also need to trigger timerblock_update_irq on change of state for the control bit itself. "case 8: /* Control. */" in the _write handler needs to call this fn. Regards, Peter > } > > /* Return conversion factor from mpcore timer ticks to qemu timer ticks. */ > -- > 2.4.4 > >