Nicolas Saenz Julienne <nsaenz@xxxxxxxxxx> writes: > Don't apply the stimer's counter side effects when modifying its > value from user-space, as this may trigger spurious interrupts. > > For example: > - The stimer is configured in auto-enable mode. > - The stimer's count is set and the timer enabled. > - The stimer expires, an interrupt is injected. > - The VM is live migrated. > - The stimer config and count are deserialized, auto-enable is ON, the > stimer is re-enabled. > - The stimer expires right away, and injects an unwarranted interrupt. > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 1f4b34f825e8 ("kvm/x86: Hyper-V SynIC timers") > Signed-off-by: Nicolas Saenz Julienne <nsaenz@xxxxxxxxxx> > --- > > Changes since v2: > - reword commit message/subject. > > Changes since v1: > - Cover all 'stimer->config.enable' updates. > > arch/x86/kvm/hyperv.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c > index 7c2dac6824e2..238afd7335e4 100644 > --- a/arch/x86/kvm/hyperv.c > +++ b/arch/x86/kvm/hyperv.c > @@ -727,10 +727,12 @@ static int stimer_set_count(struct kvm_vcpu_hv_stimer *stimer, u64 count, > > stimer_cleanup(stimer); > stimer->count = count; > - if (stimer->count == 0) > - stimer->config.enable = 0; > - else if (stimer->config.auto_enable) > - stimer->config.enable = 1; > + if (!host) { > + if (stimer->count == 0) > + stimer->config.enable = 0; > + else if (stimer->config.auto_enable) > + stimer->config.enable = 1; > + } > > if (stimer->config.enable) > stimer_mark_pending(stimer, false); LGTM, thanks! Reviewed-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> -- Vitaly