• Suravee Suthikulpanit's avatar
    KVM: SVM: Disable AVIC before setting V_IRQ · 7d611233
    Suravee Suthikulpanit authored
    The commit 64b5bd27 ("KVM: nSVM: ignore L1 interrupt window
    while running L2 with V_INTR_MASKING=1") introduced a WARN_ON,
    which checks if AVIC is enabled when trying to set V_IRQ
    in the VMCB for enabling irq window.
    
    The following warning is triggered because the requesting vcpu
    (to deactivate AVIC) does not get to process APICv update request
    for itself until the next #vmexit.
    
    WARNING: CPU: 0 PID: 118232 at arch/x86/kvm/svm/svm.c:1372 enable_irq_window+0x6a/0xa0 [kvm_amd]
     RIP: 0010:enable_irq_window+0x6a/0xa0 [kvm_amd]
     Call Trace:
      kvm_arch_vcpu_ioctl_run+0x6e3/0x1b50 [kvm]
      ? kvm_vm_ioctl_irq_line+0x27/0x40 [kvm]
      ? _copy_to_user+0x26/0x30
      ? kvm_vm_ioctl+0xb3e/0xd90 [kvm]
      ? set_next_entity+0x78/0xc0
      kvm_vcpu_ioctl+0x236/0x610 [kvm]
      ksys_ioctl+0x8a/0xc0
      __x64_sys_ioctl+0x1a/0x20
      do_syscall_64+0x58/0x210
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fixes by sending APICV update request to all other vcpus, and
    immediately update APIC for itself.
    Signed-off-by: default avatarSuravee Suthikulpanit <suravee.suthikulpanit@amd.com>
    Link: https://lkml.org/lkml/2020/5/2/167
    Fixes: 64b5bd27 ("KVM: nSVM: ignore L1 interrupt window while running L2 with V_INTR_MASKING=1")
    Message-Id: <1588818939-54264-1-git-send-email-suravee.suthikulpanit@amd.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    7d611233
x86.c 276 KB