]> git.baikalelectronics.ru Git - kernel.git/commitdiff
x86/kvm: don't forget to ACK async PF IRQ
authorVitaly Kuznetsov <vkuznets@redhat.com>
Tue, 8 Sep 2020 13:53:50 +0000 (15:53 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 12 Sep 2020 06:22:21 +0000 (02:22 -0400)
Merge commit 64f777a105bc7 ("Merge branch 'kvm-async-pf-int' into HEAD")
tried to adapt the new interrupt based async PF mechanism to the newly
introduced IDTENTRY magic but unfortunately it missed the fact that
DEFINE_IDTENTRY_SYSVEC() doesn't call ack_APIC_irq() on its own and
all DEFINE_IDTENTRY_SYSVEC() users have to call it manually.

As the result all multi-CPU KVM guest hang on boot when
KVM_FEATURE_ASYNC_PF_INT is present. The breakage went unnoticed because no
KVM userspace (e.g. QEMU) currently set it (and thus async PF mechanism
is currently disabled) but we're about to change that.

Fixes: 64f777a105bc7 ("Merge branch 'kvm-async-pf-int' into HEAD")
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Message-Id: <20200908135350.355053-3-vkuznets@redhat.com>
Tested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kernel/kvm.c

index 02d15485ff1d0212ee0ece9434375b17163f5cd0..1b51b727b140572dbe517631725be45c47a1490a 100644 (file)
@@ -271,6 +271,8 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_kvm_asyncpf_interrupt)
        struct pt_regs *old_regs = set_irq_regs(regs);
        u32 token;
 
+       ack_APIC_irq();
+
        inc_irq_stat(irq_hv_callback_count);
 
        if (__this_cpu_read(apf_reason.enabled)) {