Skip to content
  • Paolo Bonzini's avatar
    watchdog: fix deadlock with -watchdog-action pause · 30e5210a
    Paolo Bonzini authored
    qemu_clock_enable says:
    
    /* Disabling the clock will wait for related timerlists to stop
     * executing qemu_run_timers.  Thus, this functions should not
     * be used from the callback of a timer that is based on @clock.
     * Doing so would cause a deadlock.
     */
    
    and it indeed does: vm_stop uses qemu_clock_enable on QEMU_CLOCK_VIRTUAL
    and watchdogs are based on QEMU_CLOCK_VIRTUAL, and we get a deadlock.
    
    Use qemu_system_vmstop_request_prepare()/qemu_system_vmstop_request()
    instead; yet another alternative could be a BH.
    
    I checked other occurrences of vm_stop and they should not have this
    problem.  RUN_STATE_IO_ERROR could in principle (it depends on the
    code in the drivers) but it has been fixed by commit 2bd3bce8
    
    , "block:
    asynchronously stop the VM on I/O errors", 2014-06-05.
    
    Tested-by: default avatarLuiz Capitulino <lcapitulino@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    30e5210a