From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suravee Suthikulpanit Subject: [PART2 PATCH v5 00/12] iommu/AMD: Introduce IOMMU AVIC support Date: Mon, 25 Jul 2016 04:31:59 -0500 Message-ID: <1469439131-11308-1-git-send-email-suravee.suthikulpanit@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: , , , Suravee Suthikulpanit To: , , , Return-path: Received: from mail-sn1nam01on0086.outbound.protection.outlook.com ([104.47.32.86]:36916 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751127AbcGYJch (ORCPT ); Mon, 25 Jul 2016 05:32:37 -0400 Sender: kvm-owner@vger.kernel.org List-ID: =46rom: Suravee Suthikulpanit CHANGES FROM V4 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D * Remove the hash look up in the amd_iommu_update_ga() (see patch 7/1= 2). Instead, use per-vcpu pi_list to keep track of posted interrupts so= that SVM can directly update IOMMU interrupt remapping table entries dir= ectly when rescheduling VCPUs. (see patch 8/12 and 12/12)(per Radim's sug= gestion) * Re-implement AVIC VM-ID using a set of bit-mask to ensure no ID con= flict between active VMs. (see patch 10/12) * Verify VM-ID of the hash entry in avic_ga_log_notifier() before ref= erencing each per-VM data structure. (see patch 11/12) (per Radim's suggesti= on) GITHUB =3D=3D=3D=3D=3D=3D Latest git tree can be found at: http://github.com/ssuthiku/linux.git avic_part2_v5 OVERVIEW =3D=3D=3D=3D=3D=3D=3D=3D This patch set is the second part of the two-part patch series to intro= duce the new AMD Advance Virtual Interrupt Controller (AVIC) support. In addition to the SVM AVIC, AMD IOMMU also extends the AVIC capability to allow I/O interrupts injection directly into the virtualized guest local APIC without the need for hypervisor intervention. This patch series introduces a new hardware interrupt remapping (IR) mo= de in AMD IOMMU driver, the Guest Virtual APIC (GA) mode. This is in contr= ast to the existing "legacy" mode. The IR mode can be specified with a new kernel parameter: amd_iommu_guest_ir=3D[vapic (default) | legacy] When enabling GA mode, the AMD IOMMU driver will configure device inter= rupt remapping in GA mode when possible (i.e. SVM AVIC must be enabled, and = if the interrupt types are supported). Otherewise, the driver will fallbac= k to using the legacy IR mode. This patch series also introduces new interfaces between SVM and IOMMU to allow: * SVM driver to communicate to IOMMU with updated vcpu scheduling information. * IOMMU driver to notify SVM driver to schedule vcpu on to physical c= ore handle IOMMU GALog entry. DOCUMENTATIONS =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D More information about SVM AVIC can be found in the AMD64 Architecture Programmer=E2=80=99s Manual Volume 2 - System Progra= mming. http://support.amd.com/TechDocs/24593.pdf More information about IOMMU AVIC can be found int the AMD I/O Virtualization Technology (IOMMU) Specification - Rev 2.62. http://support.amd.com/TechDocs/48882_IOMMU.pdf Any feedback and comments are very much appreciated. Thank you, Suravee Suravee Suthikulpanit (12): iommu/amd: Detect and enable guest vAPIC support iommu/amd: Move and introduce new IRTE-related unions and structures iommu/amd: Introduce interrupt remapping ops structure iommu/amd: Add support for multiple IRTE formats iommu/amd: Detect and initialize guest vAPIC log iommu/amd: Adding GALOG interrupt handler iommu/amd: Introduce amd_iommu_update_ga() iommu/amd: Implements irq_set_vcpu_affinity() hook to setup vapic mod= e for pass-through devices iommu/amd: Enable vAPIC interrupt remapping mode by default svm: Introduces AVIC per-VM ID svm: Introduce AMD IOMMU avic_ga_log_notifier svm: Implements update_pi_irte hook to setup posted interrupt arch/x86/include/asm/kvm_host.h | 2 + arch/x86/kvm/svm.c | 381 +++++++++++++++++++++++++++++- drivers/iommu/amd_iommu.c | 501 ++++++++++++++++++++++++++++++++= +++----- drivers/iommu/amd_iommu_init.c | 183 ++++++++++++++- drivers/iommu/amd_iommu_proto.h | 1 + drivers/iommu/amd_iommu_types.h | 151 ++++++++++++ include/linux/amd-iommu.h | 42 +++- 7 files changed, 1191 insertions(+), 70 deletions(-) --=20 1.9.1