Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1649910

[PATCH 00/10] ARM/ARM64 Direct EOI setup for VFIO wired interrupts

From Eric Auger <eric.auger@redhat.com>
Newsgroups linux.kernel
Subject [PATCH 00/10] ARM/ARM64 Direct EOI setup for VFIO wired interrupts
Date 2017-05-24 22:20 +0200
Message-ID <tKKVb-6Ww-3@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


This series allows to optimize the deactivation of virtual interrupts
associated to vfio device wired physical interrupts (non MSI).

This is a revival of "[PATCH v4 00/13] ARM IRQ forward control based on
IRQ bypass manager" (https://lkml.org/lkml/2015/11/19/351) whose development
was stalled due to dependency on new VGIC design and drop of priority.

Without that optimization the deactivation of the physical IRQ is performed
by the host. Also for level sensitive interrupts, The VFIO driver disables
the physical IRQ. The deactivation of the virtual IRQ by the guest is trapped
and the physical IRQ gets re-enabled at that time.

The ARM GIC supports direct EOI for virtual interrupts directly mapped
 to physical interrupts. When this mode is set, the host does not
deactivate the physical interrupt anymore, but simply drops the
interrupt priority on EOI. When the guest deactivates the virtual IRQ,
the GIC automatically deactivates the physical IRQ. This avoids a world
switch on deactivation.

This series sets direct EOI mode on ARM/ARM64 for shared peripheral
interrupts. This relies on a negotiation between the vfio driver and
KVM/irqfd though the irq bypass manager.

The setup sequence is:

preamble:
- disable the physical IRQ
- halt guest execution
forwarding setting:
- program the VFIO driver for forwarding (select the right physical
  interrupt handler)
- program the VGIC and IRQCHIP for forwarding
postamble:
- resume guest execution
- enable the physical IRQ

When destroying the optimized path the following sequence is executed:
- preamble
- unset forwarding at VGIC and IRQCHIP level
- unset forwarding at VFIO level
- postamble

The injection still is based on irqfd triggering. For level sensitive
interrupts though, the resamplefd is not triggered anymore since
deactivation is not trapped by KVM.

This was tested with:
- AMD Seattle xgmac platform device assignment
- Cavium ThunderX PCIe device assignment with pci=nomsi (INTx)
- Also MSI non regression was tested on ARM

The series can be fount at:
https://github.com/eauger/linux/tree/v4.12-rc2-deoi-v5

It is based on 4.12-rc2

Best Regards

Eric

Eric Auger (10):
  vfio: platform: Add automasked field to vfio_platform_irq
  VFIO: platform: Introduce direct EOI interrupt handler
  VFIO: platform: Direct EOI irq bypass for ARM/ARM64
  VFIO: pci: Add automasked field to vfio_pci_irq_ctx
  VFIO: pci: Introduce direct EOI INTx interrupt handler
  irqbypass: Add a private field in the producer
  VFIO: pci: Direct EOI irq bypass for ARM/ARM64
  KVM: arm/arm64: vgic: Handle unshared mapped interrupts
  KVM: arm/arm64: vgic: Implement forwarding setting
  KVM: arm/arm64: register DEOI irq bypass consumer on ARM/ARM64

 arch/arm/kvm/Kconfig                             |   3 +
 arch/arm64/kvm/Kconfig                           |   3 +
 drivers/vfio/pci/Kconfig                         |   4 +
 drivers/vfio/pci/Makefile                        |   1 +
 drivers/vfio/pci/vfio_pci_intrs.c                |  78 +++++++++---
 drivers/vfio/pci/vfio_pci_irq_bypass.c           | 134 ++++++++++++++++++++
 drivers/vfio/pci/vfio_pci_private.h              |  35 ++++++
 drivers/vfio/platform/Kconfig                    |   5 +
 drivers/vfio/platform/Makefile                   |   2 +-
 drivers/vfio/platform/vfio_platform_irq.c        |  53 ++++++--
 drivers/vfio/platform/vfio_platform_irq_bypass.c | 114 +++++++++++++++++
 drivers/vfio/platform/vfio_platform_private.h    |  26 ++++
 include/kvm/arm_vgic.h                           |   9 +-
 include/linux/irqbypass.h                        |   2 +
 virt/kvm/arm/arch_timer.c                        |   3 +-
 virt/kvm/arm/arm.c                               |  42 +++++++
 virt/kvm/arm/vgic/vgic.c                         | 149 ++++++++++++++++++++++-
 virt/kvm/arm/vgic/vgic.h                         |   9 +-
 18 files changed, 632 insertions(+), 40 deletions(-)
 create mode 100644 drivers/vfio/pci/vfio_pci_irq_bypass.c
 create mode 100644 drivers/vfio/platform/vfio_platform_irq_bypass.c

-- 
2.5.5

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH 00/10] ARM/ARM64 Direct EOI setup for VFIO wired interrupts Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
  [PATCH 02/10] VFIO: platform: Introduce direct EOI interrupt handler Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
    Re: [PATCH 02/10] VFIO: platform: Introduce direct EOI interrupt  handler Alex Williamson <alex.williamson@redhat.com> - 2017-05-31 20:30 +0200
  [PATCH 06/10] irqbypass: Add a private field in the producer Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
  [PATCH 01/10] vfio: platform: Add automasked field to vfio_platform_irq Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
    Re: [PATCH 01/10] vfio: platform: Add automasked field to vfio_platform_irq Marc Zyngier <marc.zyngier@arm.com> - 2017-05-25 20:10 +0200
      Re: [PATCH 01/10] vfio: platform: Add automasked field to  vfio_platform_irq Auger Eric <eric.auger@redhat.com> - 2017-05-30 14:50 +0200
        Re: [PATCH 01/10] vfio: platform: Add automasked field to  vfio_platform_irq Alex Williamson <alex.williamson@redhat.com> - 2017-05-31 19:50 +0200
  [PATCH 07/10] VFIO: pci: Direct EOI irq bypass for ARM/ARM64 Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
  [PATCH 04/10] VFIO: pci: Add automasked field to vfio_pci_irq_ctx Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
    Re: [PATCH 04/10] VFIO: pci: Add automasked field to  vfio_pci_irq_ctx Alex Williamson <alex.williamson@redhat.com> - 2017-05-31 20:30 +0200
  [PATCH 10/10] KVM: arm/arm64: register DEOI irq bypass consumer on ARM/ARM64 Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
  [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped interrupts Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
    Re: [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped interrupts Marc Zyngier <marc.zyngier@arm.com> - 2017-05-25 21:20 +0200
      Re: [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped  interrupts Auger Eric <eric.auger@redhat.com> - 2017-05-30 15:00 +0200
    Re: [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped  interrupts Christoffer Dall <cdall@linaro.org> - 2017-06-02 15:40 +0200
      Re: [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped  interrupts Marc Zyngier <marc.zyngier@arm.com> - 2017-06-02 16:20 +0200
        Re: [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped  interrupts Christoffer Dall <cdall@linaro.org> - 2017-06-02 18:40 +0200
  [PATCH 03/10] VFIO: platform: Direct EOI irq bypass for ARM/ARM64 Eric Auger <eric.auger@redhat.com> - 2017-05-24 22:20 +0200
    Re: [PATCH 03/10] VFIO: platform: Direct EOI irq bypass for  ARM/ARM64 Alex Williamson <alex.williamson@redhat.com> - 2017-05-31 20:30 +0200
      Re: [PATCH 03/10] VFIO: platform: Direct EOI irq bypass for ARM/ARM64 Auger Eric <eric.auger@redhat.com> - 2017-05-31 21:40 +0200
        Re: [PATCH 03/10] VFIO: platform: Direct EOI irq bypass for ARM/ARM64 Marc Zyngier <marc.zyngier@arm.com> - 2017-06-01 12:50 +0200

csiph-web