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
next 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: linkBe 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.