• Roman Kagan's avatar
    kvm: x86: hyperv: avoid livelock in oneshot SynIC timers · f1ff89ec
    Roman Kagan authored
    If the SynIC timer message delivery fails due to SINT message slot being
    busy, there's no point to attempt starting the timer again until we're
    notified of the slot being released by the guest (via EOM or EOI).
    
    Even worse, when a oneshot timer fails to deliver its message, its
    re-arming with an expiration time in the past leads to immediate retry
    of the delivery, and so on, without ever letting the guest vcpu to run
    and release the slot, which results in a livelock.
    
    To avoid that, only start the timer when there's no timer message
    pending delivery.  When there is, meaning the slot is busy, the
    processing will be restarted upon notification from the guest that the
    slot is released.
    Signed-off-by: default avatarRoman Kagan <rkagan@virtuozzo.com>
    Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
    f1ff89ec
hyperv.c 33.1 KB