• Wanpeng Li's avatar
    KVM: X86: Fix softlockup when get the current kvmclock · e70b57a6
    Wanpeng Li authored
     watchdog: BUG: soft lockup - CPU#6 stuck for 22s! [qemu-system-x86:10185]
     CPU: 6 PID: 10185 Comm: qemu-system-x86 Tainted: G           OE   4.14.0-rc4+ #4
     RIP: 0010:kvm_get_time_scale+0x4e/0xa0 [kvm]
     Call Trace:
      get_time_ref_counter+0x5a/0x80 [kvm]
      kvm_hv_process_stimers+0x120/0x5f0 [kvm]
      kvm_arch_vcpu_ioctl_run+0x4b4/0x1690 [kvm]
      kvm_vcpu_ioctl+0x33a/0x620 [kvm]
      do_vfs_ioctl+0xa1/0x5d0
      SyS_ioctl+0x79/0x90
      entry_SYSCALL_64_fastpath+0x1e/0xa9
    
    This can be reproduced when running kvm-unit-tests/hyperv_stimer.flat and
    cpu-hotplug stress simultaneously. __this_cpu_read(cpu_tsc_khz) returns 0
    (set in kvmclock_cpu_down_prep()) when the pCPU is unhotplug which results
    in kvm_get_time_scale() gets into an infinite loop.
    
    This patch fixes it by treating the unhotplug pCPU as not using master clock.
    Reviewed-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e70b57a6
x86.c 228 KB