linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/17] kvm: x86: Support AMD SVM AVIC w/ in-kernel irqchip mode
@ 2019-11-01 22:41 Suthikulpanit, Suravee
  2019-11-01 22:41 ` [PATCH v4 01/17] kvm: x86: Modify kvm_x86_ops.get_enable_apicv() to use struct kvm parameter Suthikulpanit, Suravee
                   ` (16 more replies)
  0 siblings, 17 replies; 36+ messages in thread
From: Suthikulpanit, Suravee @ 2019-11-01 22:41 UTC (permalink / raw)
  To: linux-kernel, kvm
  Cc: pbonzini, rkrcmar, joro, vkuznets, rkagan, graf, jschoenh,
	karahmed, rimasluk, Grimm, Jon, Suthikulpanit, Suravee

The 'commit 67034bb9dd5e ("KVM: SVM: Add irqchip_split() checks before
enabling AVIC")' was introduced to fix miscellaneous boot-hang issues
when enable AVIC. This is mainly due to AVIC hardware doest not #vmexit
on write to LAPIC EOI register resulting in-kernel PIC and IOAPIC to
wait and do not inject new interrupts (e.g. PIT, RTC).

This limits AVIC to only work with kernel_irqchip=split mode, which is
not currently enabled by default, and also required user-space to
support split irqchip model, which might not be the case.

The goal of this series is to enable AVIC to work in both irqchip modes,
by allowing AVIC to be deactivated temporarily during runtime, and fallback
to legacy interrupt injection mode (w/ vINTR and interrupt windows)
when needed, and then re-enabled subsequently.

Similar approach is also used to handle Hyper-V SynIC in the
'commit 5c919412fe61 ("kvm/x86: Hyper-V synthetic interrupt controller")',
where APICv is permanently disabled at runtime (currently broken for
AVIC, and fixed by this series). 

This series contains serveral parts:
  * Part 1: patch 1,2
    Code clean up, refactor, and introduce helper funtions

  * Part 2: patch 3 
    Introduce APICv deactivate bits to keep track of APICv state 
    for each vm.
 
  * Part 3: patch 4-9
    Add support for activate/deactivate APICv at runtime

  * Part 4: patch 10-13:
    Add support various cases where APICv needs to be deactivated

  * Part 5: patch 14-16:
    Introduce in-kernel IOAPIC workaround for AVIC EOI

  * Part 6: path 17
    Allow enable AVIC w/ kernel_irqchip=on

Pre-requisite Patch:
  * commit b9c6ff94e43a ("iommu/amd: Re-factor guest virtual APIC (de-)activation code")
    (https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git/commit/
     ?h=next&id=b9c6ff94e43a0ee053e0c1d983fba1ac4953b762)

This series has been tested against v5.3 as following:
  * Booting Linux and Windows Server 2019 VMs upto 240 vcpus
    and FreeBSD upto 128 vcpus w/ qemu option "kernel-irqchip=on"
    and "-no-hpet".
  * Pass-through Intel 10GbE NIC and run netperf in the VM.

Changes from V3: (https://lkml.org/lkml/2019/9/13/871)
(Per Paolo comments) 
  * Replace struct kvm_vcpu with struct kvm in various interfaces
  * Replace KVM_REQ_APICV_ACTIVATE/DEACTIVATE with KVM_REQ_APICV_UPDATE request
  * Replace APICv state enum (introduced in V3) w/ deactivate bits to track APICv state
  * Remove kvm_apicv_eoi_accelerate() (introduced in V3)
  * Deactivate APICv when using PIT re-inject mode
  * Consolidate srcu_read_unlock/lock into svm_request_update_avic()

Suravee Suthikulpanit (17):
  kvm: x86: Modify kvm_x86_ops.get_enable_apicv() to use struct kvm parameter
  kvm: lapic: Introduce APICv update helper function
  kvm: x86: Introduce APICv deactivate bits
  kvm: x86: Add support for activate/de-activate APICv at runtime
  kvm: x86: Add APICv activate/deactivate request trace points
  kvm: x86: svm: Add support to activate/deactivate posted interrupts
  svm: Add support for setup/destroy virutal APIC backing page for AVIC
  kvm: x86: Introduce APICv pre-update hook
  svm: Add support for activate/deactivate AVIC at runtime
  kvm: x86: hyperv: Use APICv update request interface
  svm: Deactivate AVIC when launching guest with nested SVM support
  svm: Temporary deactivate AVIC during ExtINT handling
  kvm: i8254: Deactivate APICv when using in-kernel PIT re-injection mode.
  kvm: lapic: Clean up APIC predefined macros
  kvm: ioapic: Refactor kvm_ioapic_update_eoi()
  kvm: ioapic: Lazy update IOAPIC EOI
  svm: Allow AVIC with in-kernel irqchip mode

 arch/x86/include/asm/kvm_host.h |  18 ++++-
 arch/x86/kvm/hyperv.c           |   5 +-
 arch/x86/kvm/i8254.c            |  10 +++
 arch/x86/kvm/ioapic.c           | 149 +++++++++++++++++++++++++---------------
 arch/x86/kvm/lapic.c            |  35 ++++++----
 arch/x86/kvm/lapic.h            |   2 +
 arch/x86/kvm/svm.c              | 136 +++++++++++++++++++++++++++++++-----
 arch/x86/kvm/trace.h            |  19 +++++
 arch/x86/kvm/vmx/vmx.c          |   6 +-
 arch/x86/kvm/x86.c              |  61 +++++++++++++---
 10 files changed, 343 insertions(+), 98 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2019-11-12 12:23 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-01 22:41 [PATCH v4 00/17] kvm: x86: Support AMD SVM AVIC w/ in-kernel irqchip mode Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 01/17] kvm: x86: Modify kvm_x86_ops.get_enable_apicv() to use struct kvm parameter Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 02/17] kvm: lapic: Introduce APICv update helper function Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 03/17] kvm: x86: Introduce APICv deactivate bits Suthikulpanit, Suravee
2019-11-02  9:51   ` Paolo Bonzini
2019-11-01 22:41 ` [PATCH v4 04/17] kvm: x86: Add support for activate/de-activate APICv at runtime Suthikulpanit, Suravee
2019-11-02  9:52   ` Paolo Bonzini
2019-11-04 19:22     ` Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 05/17] kvm: x86: Add APICv activate/deactivate request trace points Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 06/17] kvm: x86: svm: Add support to activate/deactivate posted interrupts Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 07/17] svm: Add support for setup/destroy virutal APIC backing page for AVIC Suthikulpanit, Suravee
2019-11-04 21:53   ` Roman Kagan
2019-11-12  0:05     ` Suravee Suthikulpanit
2019-11-01 22:41 ` [PATCH v4 08/17] kvm: x86: Introduce APICv pre-update hook Suthikulpanit, Suravee
2019-11-04 22:05   ` Roman Kagan
2019-11-12  0:08     ` Suravee Suthikulpanit
2019-11-12 11:12       ` Roman Kagan
2019-11-01 22:41 ` [PATCH v4 09/17] svm: Add support for activate/deactivate AVIC at runtime Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 10/17] kvm: x86: hyperv: Use APICv update request interface Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 11/17] svm: Deactivate AVIC when launching guest with nested SVM support Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 12/17] svm: Temporary deactivate AVIC during ExtINT handling Suthikulpanit, Suravee
2019-11-02 10:01   ` Paolo Bonzini
2019-11-01 22:41 ` [PATCH v4 13/17] kvm: i8254: Deactivate APICv when using in-kernel PIT re-injection mode Suthikulpanit, Suravee
2019-11-02  9:57   ` Paolo Bonzini
2019-11-04 18:54     ` Suthikulpanit, Suravee
2019-11-04 21:49       ` Paolo Bonzini
2019-11-05  7:05         ` Graf (AWS), Alexander
2019-11-05  8:40           ` Roman Kagan
2019-11-04 23:17     ` Roman Kagan
2019-11-05 22:47       ` Paolo Bonzini
2019-11-11 17:37         ` Suravee Suthikulpanit
2019-11-12 12:22           ` Roman Kagan
2019-11-01 22:41 ` [PATCH v4 14/17] kvm: lapic: Clean up APIC predefined macros Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 15/17] kvm: ioapic: Refactor kvm_ioapic_update_eoi() Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 16/17] kvm: ioapic: Lazy update IOAPIC EOI Suthikulpanit, Suravee
2019-11-01 22:41 ` [PATCH v4 17/17] svm: Allow AVIC with in-kernel irqchip mode Suthikulpanit, Suravee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).