[PART2 PATCH v3 00/11] iommu/AMD: Introduce IOMMU AVIC support

From: Suravee Suthikulpanit
Date: Mon Jul 11 2016 - 06:12:23 EST

From: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx>

* Introduce struct irte_ops to avoid redundant "if/else" logics
for handling different IRTE formats. (patch 3 and 4)
(per Joerg's suggestion)
* Introduce proper #defines for a few magic numbers.
(per Joerg's suggestion)
* Move logic to setup IRQ_POSTING_CAP to later patch.
(per Paolo's suggestion)
* Fix kbuild test robot error due to case when #ifndef CONFIG_IRQ_REMAP.
* Restructure a few iommu patches to simply the code changes.

Latest git tree can be found at:
http://github.com/ssuthiku/linux.git avic_part2_v3

This patch set is the second part of the two-part patch series to introduce
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) mode
in AMD IOMMU driver, the Guest Virtual APIC (GA) mode. This is in contrast
to the existing "legacy" mode. The IR mode can be specified with a new
kernel parameter:

amd_iommu_guest_ir=[vapic (default) | legacy]

When enabling GA mode, the AMD IOMMU driver will configure device interrupt
remapping in GA mode when possible (i.e. SVM AVIC must be enabled, and if
the interrupt types are supported). Otherewise, the driver will fallback
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
* IOMMU driver to notify SVM driver to schedule vcpu on to physical core
handle IOMMU GALog entry.

More information about SVM AVIC can be found in the
AMD64 Architecture Programmerâs Manual Volume 2 - System Programming.


More information about IOMMU AVIC can be found int the
AMD I/O Virtualization Technology (IOMMU) Specification - Rev 2.62.


Any feedback and comments are very much appreciated.

Thank you,

Suravee Suthikulpanit (11):
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 mode
for pass-through devices
iommu/amd: Enable vAPIC interrupt remapping mode by default
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 | 197 ++++++++++++++-
drivers/iommu/amd_iommu.c | 538 +++++++++++++++++++++++++++++++++++-----
drivers/iommu/amd_iommu_init.c | 188 +++++++++++++-
drivers/iommu/amd_iommu_proto.h | 1 +
drivers/iommu/amd_iommu_types.h | 164 ++++++++++++
include/linux/amd-iommu.h | 35 ++-
7 files changed, 1055 insertions(+), 70 deletions(-)