Re: [PATCH] KVM: arm/arm64: Don't emulate virtual timers on userspace ioctls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 25 Apr 2019 13:57:40 +0100,
Andre Przywara <andre.przywara@xxxxxxx> wrote:
> 
> From: Christoffer Dall <christoffer.dall@xxxxxxx>
> 
> When a VCPU never runs before a guest exists, but we set timer registers
> up via ioctls, the associated hrtimer might never get cancelled.
> 
> Since we moved vcpu_load/put into the arch-specific implementations and
> only have load/put for KVM_RUN, we won't ever have a scheduled hrtimer
> for emulating a timer when modifying the timer state via an ioctl from
> user space.  All we need to do is make sure that we pick up the right
> state when we load the timer state next time userspace calls KVM_RUN
> again.
> 
> We also do not need to worry about this interacting with the bg_timer,
> because if we were in WFI from the guest, and somehow ended up in a
> kvm_arm_timer_set_reg, it means that:
> 
>  1. the VCPU thread has received a signal,
>  2. we have called vcpu_load when being scheduled in again,
>  3. we have called vcpu_put when we returned to userspace for it to issue
>     another ioctl
> 
> And therefore will not have a bg_timer programmed and the event is
> treated as a spurious wakeup from WFI if userspace decides to run the
> vcpu again even if there are not virtual interrupts.
> 
> This fixes stray virtual timer interrupts triggered by an expiring
> hrtimer, which happens after a failed live migration, for instance.
> 
> Signed-off-by: Christoffer Dall <christoffer.dall@xxxxxxx>
> Reported-by: Andre Przywara <andre.przywara@xxxxxxx>
> Tested-by: Andre Przywara <andre.przywara@xxxxxxx>
> Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>

Fixes: bee038a674875 ("KVM: arm/arm64: Rework the timer code to use a
timer_map")

Applied to -master.

Thanks,

	M.

-- 
Jazz is not dead, it just smell funny.



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux