mirror_ubuntu-kernels/arch/x86/kvm
Vitaly Kuznetsov 2f15d027c0 KVM: x86: Properly handle APF vs disabled LAPIC situation
Async PF 'page ready' event may happen when LAPIC is (temporary) disabled.
In particular, Sebastien reports that when Linux kernel is directly booted
by Cloud Hypervisor, LAPIC is 'software disabled' when APF mechanism is
initialized. On initialization KVM tries to inject 'wakeup all' event and
puts the corresponding token to the slot. It is, however, failing to inject
an interrupt (kvm_apic_set_irq() -> __apic_accept_irq() -> !apic_enabled())
so the guest never gets notified and the whole APF mechanism gets stuck.
The same issue is likely to happen if the guest temporary disables LAPIC
and a previously unavailable page becomes available.

Do two things to resolve the issue:
- Avoid dequeuing 'page ready' events from APF queue when LAPIC is
  disabled.
- Trigger an attempt to deliver pending 'page ready' events when LAPIC
  becomes enabled (SPIV or MSR_IA32_APICBASE).

Reported-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Message-Id: <20210422092948.568327-1-vkuznets@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-04-26 05:19:27 -04:00
..
mmu KVM: x86/mmu: Tear down roots before kvm_mmu_zap_all_fast returns 2021-04-19 18:04:45 -04:00
svm Merge branch 'kvm-sev-cgroup' into HEAD 2021-04-22 13:19:01 -04:00
vmx KVM: VMX: use EPT_VIOLATION_GVA_TRANSLATED instead of 0x100 2021-04-23 07:43:11 -04:00
cpuid.c KVM: x86: Fix implicit enum conversion goof in scattered reverse CPUID code 2021-04-23 07:43:11 -04:00
cpuid.h KVM: x86: Fix implicit enum conversion goof in scattered reverse CPUID code 2021-04-23 07:43:11 -04:00
debugfs.c KVM: let kvm_destroy_vm_debugfs clean up vCPU debugfs directories 2020-06-04 11:00:54 -04:00
emulate.c KVM: x86: Restore all 64 bits of DR6 and DR7 during RSM on x86-64 2021-02-09 08:17:05 -05:00
hyperv.c KVM: x86: hyper-v: Don't touch TSC page values when guest opted for re-enlightenment 2021-03-18 08:02:46 -04:00
hyperv.h KVM: x86: hyper-v: Prevent using not-yet-updated TSC page by secondary CPUs 2021-03-17 04:03:22 -04:00
i8254.c kvm: i8254: remove redundant assignment to pointer s 2020-06-11 12:35:18 -04:00
i8254.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
i8259.c KVM: x86: Refactor picdev_write() to prevent Spectre-v1/L1TF attacks 2020-01-27 19:59:37 +01:00
ioapic.c KVM: ioapic: break infinite recursion on lazy EOI 2020-10-24 04:42:06 -04:00
ioapic.h kvm/x86: Remove redundant function implementations 2020-05-27 13:11:10 -04:00
irq_comm.c x86/kvm: Use msi_msg shadow structs 2020-10-28 20:26:26 +01:00
irq.c KVM: x86/xen: Add event channel interrupt vector upcall 2021-02-04 14:19:39 +00:00
irq.h kvm/x86: Remove redundant function implementations 2020-05-27 13:11:10 -04:00
Kconfig x86/sgx: Introduce virtual EPC for use by KVM guests 2021-04-06 09:43:17 +02:00
kvm_cache_regs.h KVM: x86: use static calls to reduce kvm_x86_ops overhead 2021-02-04 05:27:30 -05:00
kvm_emulate.h KVM: x86: reading DR cannot fail 2021-02-09 08:17:07 -05:00
lapic.c KVM: x86: Properly handle APF vs disabled LAPIC situation 2021-04-26 05:19:27 -04:00
lapic.h KVM: x86: hyper-v: Always use to_hv_vcpu() accessor to get to 'struct kvm_vcpu_hv' 2021-02-09 08:17:13 -05:00
Makefile Merge branch 'kvm-sev-cgroup' into HEAD 2021-04-22 13:19:01 -04:00
mmu.h KVM: x86: Get active PCID only when writing a CR3 value 2021-03-15 04:43:56 -04:00
mtrr.c KVM: x86: Add helper to consolidate "raw" reserved GPA mask calculations 2021-02-04 09:27:30 -05:00
pmu.c KVM: x86: use static calls to reduce kvm_x86_ops overhead 2021-02-04 05:27:30 -05:00
pmu.h KVM: vmx/pmu: Release guest LBR event via lazy release mechanism 2021-02-04 05:27:26 -05:00
trace.h KVM: x86/xen: intercept xen hypercalls if enabled 2021-02-04 14:18:45 +00:00
tss.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
x86.c KVM: x86: Properly handle APF vs disabled LAPIC situation 2021-04-26 05:19:27 -04:00
x86.h Merge branch 'kvm-sev-cgroup' into HEAD 2021-04-22 13:19:01 -04:00
xen.c KVM: x86/xen: Add support for vCPU runstate information 2021-03-02 14:30:54 -05:00
xen.h KVM: x86/xen: Add support for vCPU runstate information 2021-03-02 14:30:54 -05:00