All of lore.kernel.org
 help / color / mirror / Atom feed
From: Feng Wu <feng.wu@intel.com>
To: pbonzini@redhat.com, alex.williamson@redhat.com, joro@8bytes.org,
	mtosatti@redhat.com
Cc: eric.auger@linaro.org, kvm@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
	Feng Wu <feng.wu@intel.com>
Subject: [PATCH v9 00/18] Add VT-d Posted-Interrupts support - including prerequisite series
Date: Fri, 18 Sep 2015 22:29:38 +0800	[thread overview]
Message-ID: <1442586596-5920-1-git-send-email-feng.wu@intel.com> (raw)

VT-d Posted-Interrupts is an enhancement to CPU side Posted-Interrupt.
With VT-d Posted-Interrupts enabled, external interrupts from
direct-assigned devices can be delivered to guests without VMM
intervention when guest is running in non-root mode.

You can find the VT-d Posted-Interrtups Spec. in the following URL:
http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/vt-directed-io-spec.html

v9:
- Include the whole series:
[01/18]: irq bypasser manager
[02/18] - [06/18]: Common non-architecture part for VT-d PI and ARM side forwarded irq
[07/18] - [18/18]: VT-d PI part

v8:
refer to the changelog in each patch

v7:
* Define two weak irq bypass callbacks:
  - kvm_arch_irq_bypass_start()
  - kvm_arch_irq_bypass_stop()
* Remove the x86 dummy implementation of the above two functions.
* Print some useful information instead of WARN_ON() when the
  irq bypass consumer unregistration fails.
* Fix an issue when calling pi_pre_block and pi_post_block.

v6:
* Rebase on 4.2.0-rc6
* Rebase on https://lkml.org/lkml/2015/8/6/526 and http://www.gossamer-threads.com/lists/linux/kernel/2235623
* Make the add_consumer and del_consumer callbacks static
* Remove pointless INIT_LIST_HEAD to 'vdev->ctx[vector].producer.node)'
* Use dev_info instead of WARN_ON() when irq_bypass_register_producer fails
* Remove optional dummy callbacks for irq producer

v4:
* For lowest-priority interrupt, only support single-CPU destination
interrupts at the current stage, more common lowest priority support
will be added later.
* Accoring to Marcelo's suggestion, when vCPU is blocked, we handle
the posted-interrupts in the HLT emulation path.
* Some small changes (coding style, typo, add some code comments)

v3:
* Adjust the Posted-interrupts Descriptor updating logic when vCPU is
  preempted or blocked.
* KVM_DEV_VFIO_DEVICE_POSTING_IRQ --> KVM_DEV_VFIO_DEVICE_POST_IRQ
* __KVM_HAVE_ARCH_KVM_VFIO_POSTING --> __KVM_HAVE_ARCH_KVM_VFIO_POST
* Add KVM_DEV_VFIO_DEVICE_UNPOST_IRQ attribute for VFIO irq, which
  can be used to change back to remapping mode.
* Fix typo

v2:
* Use VFIO framework to enable this feature, the VFIO part of this series is
  base on Eric's patch "[PATCH v3 0/8] KVM-VFIO IRQ forward control"
* Rebase this patchset on git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git,
  then revise some irq logic based on the new hierarchy irqdomain patches provided
  by Jiang Liu <jiang.liu@linux.intel.com>


*** BLURB HERE ***

Alex Williamson (1):
  virt: IRQ bypass manager

Eric Auger (4):
  KVM: arm/arm64: select IRQ_BYPASS_MANAGER
  KVM: create kvm_irqfd.h
  KVM: introduce kvm_arch functions for IRQ bypass
  KVM: eventfd: add irq bypass consumer management

Feng Wu (13):
  KVM: x86: select IRQ_BYPASS_MANAGER
  KVM: Extend struct pi_desc for VT-d Posted-Interrupts
  KVM: Add some helper functions for Posted-Interrupts
  KVM: Define a new interface kvm_intr_is_single_vcpu()
  KVM: Make struct kvm_irq_routing_table accessible
  KVM: make kvm_set_msi_irq() public
  vfio: Register/unregister irq_bypass_producer
  KVM: x86: Update IRTE for posted-interrupts
  KVM: Implement IRQ bypass consumer callbacks for x86
  KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd'
  KVM: Update Posted-Interrupts Descriptor when vCPU is preempted
  KVM: Update Posted-Interrupts Descriptor when vCPU is blocked
  iommu/vt-d: Add a command line parameter for VT-d posted-interrupts

 Documentation/kernel-parameters.txt   |   1 +
 Documentation/virtual/kvm/locking.txt |  12 ++
 MAINTAINERS                           |   7 +
 arch/arm/kvm/Kconfig                  |   2 +
 arch/arm/kvm/Makefile                 |   1 +
 arch/arm64/kvm/Kconfig                |   2 +
 arch/arm64/kvm/Makefile               |   1 +
 arch/x86/include/asm/kvm_host.h       |  24 +++
 arch/x86/kvm/Kconfig                  |   3 +
 arch/x86/kvm/Makefile                 |   3 +
 arch/x86/kvm/irq_comm.c               |  32 ++-
 arch/x86/kvm/lapic.c                  |  59 ++++++
 arch/x86/kvm/lapic.h                  |   2 +
 arch/x86/kvm/trace.h                  |  33 ++++
 arch/x86/kvm/vmx.c                    | 361 +++++++++++++++++++++++++++++++++-
 arch/x86/kvm/x86.c                    | 108 +++++++++-
 drivers/iommu/irq_remapping.c         |  12 +-
 drivers/vfio/pci/Kconfig              |   1 +
 drivers/vfio/pci/vfio_pci_intrs.c     |   9 +
 drivers/vfio/pci/vfio_pci_private.h   |   2 +
 include/linux/irqbypass.h             |  90 +++++++++
 include/linux/kvm_host.h              |  29 +++
 include/linux/kvm_irqfd.h             |  71 +++++++
 virt/kvm/Kconfig                      |   3 +
 virt/kvm/eventfd.c                    | 142 +++++++------
 virt/kvm/irqchip.c                    |  10 -
 virt/kvm/kvm_main.c                   |   3 +
 virt/lib/Kconfig                      |   2 +
 virt/lib/Makefile                     |   1 +
 virt/lib/irqbypass.c                  | 257 ++++++++++++++++++++++++
 30 files changed, 1182 insertions(+), 101 deletions(-)
 create mode 100644 include/linux/irqbypass.h
 create mode 100644 include/linux/kvm_irqfd.h
 create mode 100644 virt/lib/Kconfig
 create mode 100644 virt/lib/Makefile
 create mode 100644 virt/lib/irqbypass.c

-- 
2.1.0


WARNING: multiple messages have this Message-ID (diff)
From: Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org,
	mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Subject: [PATCH v9 00/18] Add VT-d Posted-Interrupts support - including prerequisite series
Date: Fri, 18 Sep 2015 22:29:38 +0800	[thread overview]
Message-ID: <1442586596-5920-1-git-send-email-feng.wu@intel.com> (raw)

VT-d Posted-Interrupts is an enhancement to CPU side Posted-Interrupt.
With VT-d Posted-Interrupts enabled, external interrupts from
direct-assigned devices can be delivered to guests without VMM
intervention when guest is running in non-root mode.

You can find the VT-d Posted-Interrtups Spec. in the following URL:
http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/vt-directed-io-spec.html

v9:
- Include the whole series:
[01/18]: irq bypasser manager
[02/18] - [06/18]: Common non-architecture part for VT-d PI and ARM side forwarded irq
[07/18] - [18/18]: VT-d PI part

v8:
refer to the changelog in each patch

v7:
* Define two weak irq bypass callbacks:
  - kvm_arch_irq_bypass_start()
  - kvm_arch_irq_bypass_stop()
* Remove the x86 dummy implementation of the above two functions.
* Print some useful information instead of WARN_ON() when the
  irq bypass consumer unregistration fails.
* Fix an issue when calling pi_pre_block and pi_post_block.

v6:
* Rebase on 4.2.0-rc6
* Rebase on https://lkml.org/lkml/2015/8/6/526 and http://www.gossamer-threads.com/lists/linux/kernel/2235623
* Make the add_consumer and del_consumer callbacks static
* Remove pointless INIT_LIST_HEAD to 'vdev->ctx[vector].producer.node)'
* Use dev_info instead of WARN_ON() when irq_bypass_register_producer fails
* Remove optional dummy callbacks for irq producer

v4:
* For lowest-priority interrupt, only support single-CPU destination
interrupts at the current stage, more common lowest priority support
will be added later.
* Accoring to Marcelo's suggestion, when vCPU is blocked, we handle
the posted-interrupts in the HLT emulation path.
* Some small changes (coding style, typo, add some code comments)

v3:
* Adjust the Posted-interrupts Descriptor updating logic when vCPU is
  preempted or blocked.
* KVM_DEV_VFIO_DEVICE_POSTING_IRQ --> KVM_DEV_VFIO_DEVICE_POST_IRQ
* __KVM_HAVE_ARCH_KVM_VFIO_POSTING --> __KVM_HAVE_ARCH_KVM_VFIO_POST
* Add KVM_DEV_VFIO_DEVICE_UNPOST_IRQ attribute for VFIO irq, which
  can be used to change back to remapping mode.
* Fix typo

v2:
* Use VFIO framework to enable this feature, the VFIO part of this series is
  base on Eric's patch "[PATCH v3 0/8] KVM-VFIO IRQ forward control"
* Rebase this patchset on git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git,
  then revise some irq logic based on the new hierarchy irqdomain patches provided
  by Jiang Liu <jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>


*** BLURB HERE ***

Alex Williamson (1):
  virt: IRQ bypass manager

Eric Auger (4):
  KVM: arm/arm64: select IRQ_BYPASS_MANAGER
  KVM: create kvm_irqfd.h
  KVM: introduce kvm_arch functions for IRQ bypass
  KVM: eventfd: add irq bypass consumer management

Feng Wu (13):
  KVM: x86: select IRQ_BYPASS_MANAGER
  KVM: Extend struct pi_desc for VT-d Posted-Interrupts
  KVM: Add some helper functions for Posted-Interrupts
  KVM: Define a new interface kvm_intr_is_single_vcpu()
  KVM: Make struct kvm_irq_routing_table accessible
  KVM: make kvm_set_msi_irq() public
  vfio: Register/unregister irq_bypass_producer
  KVM: x86: Update IRTE for posted-interrupts
  KVM: Implement IRQ bypass consumer callbacks for x86
  KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd'
  KVM: Update Posted-Interrupts Descriptor when vCPU is preempted
  KVM: Update Posted-Interrupts Descriptor when vCPU is blocked
  iommu/vt-d: Add a command line parameter for VT-d posted-interrupts

 Documentation/kernel-parameters.txt   |   1 +
 Documentation/virtual/kvm/locking.txt |  12 ++
 MAINTAINERS                           |   7 +
 arch/arm/kvm/Kconfig                  |   2 +
 arch/arm/kvm/Makefile                 |   1 +
 arch/arm64/kvm/Kconfig                |   2 +
 arch/arm64/kvm/Makefile               |   1 +
 arch/x86/include/asm/kvm_host.h       |  24 +++
 arch/x86/kvm/Kconfig                  |   3 +
 arch/x86/kvm/Makefile                 |   3 +
 arch/x86/kvm/irq_comm.c               |  32 ++-
 arch/x86/kvm/lapic.c                  |  59 ++++++
 arch/x86/kvm/lapic.h                  |   2 +
 arch/x86/kvm/trace.h                  |  33 ++++
 arch/x86/kvm/vmx.c                    | 361 +++++++++++++++++++++++++++++++++-
 arch/x86/kvm/x86.c                    | 108 +++++++++-
 drivers/iommu/irq_remapping.c         |  12 +-
 drivers/vfio/pci/Kconfig              |   1 +
 drivers/vfio/pci/vfio_pci_intrs.c     |   9 +
 drivers/vfio/pci/vfio_pci_private.h   |   2 +
 include/linux/irqbypass.h             |  90 +++++++++
 include/linux/kvm_host.h              |  29 +++
 include/linux/kvm_irqfd.h             |  71 +++++++
 virt/kvm/Kconfig                      |   3 +
 virt/kvm/eventfd.c                    | 142 +++++++------
 virt/kvm/irqchip.c                    |  10 -
 virt/kvm/kvm_main.c                   |   3 +
 virt/lib/Kconfig                      |   2 +
 virt/lib/Makefile                     |   1 +
 virt/lib/irqbypass.c                  | 257 ++++++++++++++++++++++++
 30 files changed, 1182 insertions(+), 101 deletions(-)
 create mode 100644 include/linux/irqbypass.h
 create mode 100644 include/linux/kvm_irqfd.h
 create mode 100644 virt/lib/Kconfig
 create mode 100644 virt/lib/Makefile
 create mode 100644 virt/lib/irqbypass.c

-- 
2.1.0

             reply	other threads:[~2015-09-18 14:43 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-18 14:29 Feng Wu [this message]
2015-09-18 14:29 ` [PATCH v9 00/18] Add VT-d Posted-Interrupts support - including prerequisite series Feng Wu
2015-09-18 14:29 ` [PATCH v9 01/18] virt: IRQ bypass manager Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 15:34   ` Wu, Feng
2015-09-18 15:34     ` Wu, Feng
2015-09-18 14:29 ` [PATCH v9 02/18] KVM: x86: select IRQ_BYPASS_MANAGER Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 03/18] KVM: arm/arm64: " Feng Wu
2015-09-21 19:32   ` Eric Auger
2015-09-18 14:29 ` [PATCH v9 04/18] KVM: create kvm_irqfd.h Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 15:35   ` Wu, Feng
2015-09-18 15:35     ` Wu, Feng
2015-09-18 14:29 ` [PATCH v9 05/18] KVM: introduce kvm_arch functions for IRQ bypass Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 06/18] KVM: eventfd: add irq bypass consumer management Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 07/18] KVM: Extend struct pi_desc for VT-d Posted-Interrupts Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 08/18] KVM: Add some helper functions for Posted-Interrupts Feng Wu
2015-09-18 14:29 ` [PATCH v9 09/18] KVM: Define a new interface kvm_intr_is_single_vcpu() Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 10/18] KVM: Make struct kvm_irq_routing_table accessible Feng Wu
2015-09-18 14:29 ` [PATCH v9 11/18] KVM: make kvm_set_msi_irq() public Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 17:19   ` Alex Williamson
2015-09-18 17:19     ` Alex Williamson
2015-09-21  8:56   ` Wu, Feng
2015-09-21  8:56     ` Wu, Feng
2015-09-21  9:32     ` Paolo Bonzini
2015-09-21  9:32       ` Paolo Bonzini
2015-09-21 11:35       ` Wu, Feng
2015-09-21 11:35         ` Wu, Feng
2015-09-21 12:06         ` Paolo Bonzini
2015-09-21 12:06           ` Paolo Bonzini
2015-09-21 12:08           ` Wu, Feng
2015-09-21 12:08             ` Wu, Feng
2015-09-21 12:53       ` Wu, Feng
2015-09-21 12:53         ` Wu, Feng
2015-09-21 13:02         ` Paolo Bonzini
2015-09-21 19:46           ` Eric Auger
2015-09-21 19:46             ` Eric Auger
2016-04-26 20:08   ` Alex Williamson
2016-04-26 20:08     ` Alex Williamson
2016-04-27  1:32     ` Wu, Feng
2016-04-27  1:32       ` Wu, Feng
2016-04-28 16:40       ` Alex Williamson
2016-04-28 16:40         ` Alex Williamson
2016-04-28 15:35     ` Eric Auger
2016-04-28 15:35       ` Eric Auger
2015-09-18 14:29 ` [PATCH v9 13/18] KVM: x86: Update IRTE for posted-interrupts Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 14/18] KVM: Implement IRQ bypass consumer callbacks for x86 Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 15/18] KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd' Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 16/18] KVM: Update Posted-Interrupts Descriptor when vCPU is preempted Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 14:29 ` [PATCH v9 17/18] KVM: Update Posted-Interrupts Descriptor when vCPU is blocked Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-18 16:06   ` Paolo Bonzini
2015-09-18 16:06     ` Paolo Bonzini
2015-09-19  7:11     ` Wu, Feng
2015-09-19  7:11       ` Wu, Feng
2015-09-21  2:16     ` Wu, Feng
2015-09-21  5:32       ` Paolo Bonzini
2015-09-21  5:32         ` Paolo Bonzini
2015-09-21  5:45         ` Wu, Feng
2015-09-21  5:45           ` Wu, Feng
2015-10-14 23:41   ` David Matlack
2015-10-15  1:33     ` Wu, Feng
2015-10-15  1:33       ` Wu, Feng
2015-10-15 17:39       ` David Matlack
2015-10-15 18:13         ` Paolo Bonzini
2015-10-15 18:13           ` Paolo Bonzini
2015-10-16  1:45           ` Wu, Feng
2015-10-16  1:45             ` Wu, Feng
2015-09-18 14:29 ` [PATCH v9 18/18] iommu/vt-d: Add a command line parameter for VT-d posted-interrupts Feng Wu
2015-09-18 14:29   ` Feng Wu
2015-09-21 13:46   ` Joerg Roedel
2015-09-21 13:46     ` Joerg Roedel
2015-09-18 14:58 ` [PATCH v9 00/18] Add VT-d Posted-Interrupts support - including prerequisite series Paolo Bonzini
2015-09-18 14:58   ` Paolo Bonzini
2015-09-18 15:08   ` Wu, Feng
2015-09-18 15:08     ` Wu, Feng
2015-09-18 15:21     ` Paolo Bonzini
2015-09-18 15:21       ` Paolo Bonzini
2015-09-18 15:38       ` Wu, Feng
2015-09-18 17:57   ` Alex Williamson
2015-09-18 17:57     ` Alex Williamson
2015-09-25  1:49 ` Wu, Feng
2015-09-25  1:49   ` Wu, Feng
2015-09-25 11:14   ` Paolo Bonzini
2015-09-25 11:14     ` Paolo Bonzini
2015-09-28 10:14     ` Wu, Feng
2015-09-28 10:14       ` Wu, Feng
2015-09-28 10:18       ` Paolo Bonzini
2015-09-28 10:18         ` Paolo Bonzini
2015-09-28 10:22         ` Wu, Feng
2015-09-28 10:22           ` Wu, Feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1442586596-5920-1-git-send-email-feng.wu@intel.com \
    --to=feng.wu@intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=eric.auger@linaro.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.