[Spice-commits] qemu-timer.c

Gerd Hoffmann kraxel at kemper.freedesktop.org
Tue Sep 4 06:27:37 PDT 2012


 qemu-timer.c |    3 ---
 1 file changed, 3 deletions(-)

New commits:
commit de188751da8db3c77a681bf903035a0e5218c463
Author: Paolo Bonzini <pbonzini at redhat.com>
Date:   Mon Sep 3 17:34:32 2012 +0200

    qemu-timer: properly arm alarm timer for timers set by device initialization
    
    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 <aurelien at aurel32.net>
    Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
    Reviewed-by: Jan Kiszka <jan.kiszka at siemens.com>
    Tested-by: Aurelien Jarno <aurelien at aurel32.net>
    Tested-by: Michael Tokarev <mjt at tls.msk.ru>
    Signed-off-by: Aurelien Jarno <aurelien at aurel32.net>

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:


More information about the Spice-commits mailing list