[Devel] [PATCH] kvm: x86: hyperv: avoid livelock in oneshot SynIC timers
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Jul 20 11:38:19 MSK 2017
Need it in update 5?
Any bug id?
--
Best regards,
Konstantin Khorenko,
Virtuozzo Linux Kernel Team
On 07/19/2017 08:31 PM, Roman Kagan wrote:
> 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, 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 the guest releases the slot, the processing is
> resumed so the timer will be started then.
>
> Signed-off-by: Roman Kagan <rkagan at virtuozzo.com>
> ---
> arch/x86/kvm/hyperv.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
> index c8efdce3e702..ab9501c2f32c 100644
> --- a/arch/x86/kvm/hyperv.c
> +++ b/arch/x86/kvm/hyperv.c
> @@ -632,9 +632,10 @@ void kvm_hv_process_stimers(struct kvm_vcpu *vcpu)
> }
>
> if ((stimer->config & HV_STIMER_ENABLE) &&
> - stimer->count)
> - stimer_start(stimer);
> - else
> + stimer->count) {
> + if (!stimer->msg_pending)
> + stimer_start(stimer);
> + } else
> stimer_cleanup(stimer);
> }
> }
>
More information about the Devel
mailing list