On Mon, Sep 03, 2012 at 05:34:32PM +0200, Paolo Bonzini wrote: > QEMU will hang when fed the following command-line > > qemu-system-mips -kernel vmlinux-2.6.32-5-4kc-malta -append "console=ttyS0" > -nographic -net none > > The -net none is important otherwise it seems some events are generated > causing the things to work. When it doesn't work, the guest hangs when > measuring the CPU frequency, after the following line: > > [ 0.000000] NR_IRQS:256 > > Pressing a key on the serial port unblocks it, hinting that the problem > is due to the recent elimination of the 1 second timeout in the main > loop. > > The problem is that because init_timer_alarm sets the timer's pending > flag to true, the alarm timer is never armed until after the first time > through the main loop. Thus the bug started when QEMU started testing > the pending flag in qemu_mod_timer (commit 1828be3, more alarm timer > cleanup, 2010-03-10). > > But actually, it isn't true at all that a timer is pending when the > alarm timer is created, and the real bug has been latent forever: the > fix is to remove the bogus setting of pending flag. > > Reported-by: Aurelien Jarno <aurel...@aurel32.net> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > qemu-timer.c | 3 --- > 1 file modificato, 3 rimozioni(-) > > diff --git a/qemu-timer.c b/qemu-timer.c > index 5aea94e..c7a1551 100644 > --- a/qemu-timer.c > +++ b/qemu-timer.c > @@ -759,11 +759,8 @@ int init_timer_alarm(void) > goto fail; > } > > - /* first event is at time 0 */ > atexit(quit_timers); > - t->pending = true; > alarm_timer = t; > - > return 0; > > fail: >
Thanks a lot that was quite fast! Tested-by: Aurelien Jarno <aurel...@aurel32.net> -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net