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 v8 06/13] vfio: Register/unregister irq_bypass_producer
Date: Wed, 16 Sep 2015 16:50:02 +0800	[thread overview]
Message-ID: <1442393409-2623-7-git-send-email-feng.wu@intel.com> (raw)
In-Reply-To: <1442393409-2623-1-git-send-email-feng.wu@intel.com>

This patch adds the registration/unregistration of an
irq_bypass_producer for MSI/MSIx on vfio pci devices.

Signed-off-by: Feng Wu <feng.wu@intel.com>
---
v8:
- Merge "[PATCH v7 08/17] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI devices"
  into this patch.

v6:
- 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

 drivers/vfio/pci/Kconfig            | 1 +
 drivers/vfio/pci/vfio_pci_intrs.c   | 9 +++++++++
 drivers/vfio/pci/vfio_pci_private.h | 2 ++
 3 files changed, 12 insertions(+)

diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig
index 579d83b..02912f1 100644
--- a/drivers/vfio/pci/Kconfig
+++ b/drivers/vfio/pci/Kconfig
@@ -2,6 +2,7 @@ config VFIO_PCI
 	tristate "VFIO support for PCI devices"
 	depends on VFIO && PCI && EVENTFD
 	select VFIO_VIRQFD
+	select IRQ_BYPASS_MANAGER
 	help
 	  Support for the PCI VFIO bus driver.  This is required to make
 	  use of PCI drivers using the VFIO framework.
diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index 1f577b4..c65299d 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -319,6 +319,7 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
 
 	if (vdev->ctx[vector].trigger) {
 		free_irq(irq, vdev->ctx[vector].trigger);
+		irq_bypass_unregister_producer(&vdev->ctx[vector].producer);
 		kfree(vdev->ctx[vector].name);
 		eventfd_ctx_put(vdev->ctx[vector].trigger);
 		vdev->ctx[vector].trigger = NULL;
@@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
 		return ret;
 	}
 
+	vdev->ctx[vector].producer.token = trigger;
+	vdev->ctx[vector].producer.irq = irq;
+	ret = irq_bypass_register_producer(&vdev->ctx[vector].producer);
+	if (unlikely(ret))
+		dev_info(&pdev->dev,
+		"irq bypass producer (token %p) registeration fails: %d\n",
+		vdev->ctx[vector].producer.token, ret);
+
 	vdev->ctx[vector].trigger = trigger;
 
 	return 0;
diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h
index ae0e1b4..0e7394f 100644
--- a/drivers/vfio/pci/vfio_pci_private.h
+++ b/drivers/vfio/pci/vfio_pci_private.h
@@ -13,6 +13,7 @@
 
 #include <linux/mutex.h>
 #include <linux/pci.h>
+#include <linux/irqbypass.h>
 
 #ifndef VFIO_PCI_PRIVATE_H
 #define VFIO_PCI_PRIVATE_H
@@ -29,6 +30,7 @@ struct vfio_pci_irq_ctx {
 	struct virqfd		*mask;
 	char			*name;
 	bool			masked;
+	struct irq_bypass_producer	producer;
 };
 
 struct vfio_pci_device {
-- 
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 v8 06/13] vfio: Register/unregister irq_bypass_producer
Date: Wed, 16 Sep 2015 16:50:02 +0800	[thread overview]
Message-ID: <1442393409-2623-7-git-send-email-feng.wu@intel.com> (raw)
In-Reply-To: <1442393409-2623-1-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>

This patch adds the registration/unregistration of an
irq_bypass_producer for MSI/MSIx on vfio pci devices.

Signed-off-by: Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
v8:
- Merge "[PATCH v7 08/17] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI devices"
  into this patch.

v6:
- 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

 drivers/vfio/pci/Kconfig            | 1 +
 drivers/vfio/pci/vfio_pci_intrs.c   | 9 +++++++++
 drivers/vfio/pci/vfio_pci_private.h | 2 ++
 3 files changed, 12 insertions(+)

diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig
index 579d83b..02912f1 100644
--- a/drivers/vfio/pci/Kconfig
+++ b/drivers/vfio/pci/Kconfig
@@ -2,6 +2,7 @@ config VFIO_PCI
 	tristate "VFIO support for PCI devices"
 	depends on VFIO && PCI && EVENTFD
 	select VFIO_VIRQFD
+	select IRQ_BYPASS_MANAGER
 	help
 	  Support for the PCI VFIO bus driver.  This is required to make
 	  use of PCI drivers using the VFIO framework.
diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index 1f577b4..c65299d 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -319,6 +319,7 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
 
 	if (vdev->ctx[vector].trigger) {
 		free_irq(irq, vdev->ctx[vector].trigger);
+		irq_bypass_unregister_producer(&vdev->ctx[vector].producer);
 		kfree(vdev->ctx[vector].name);
 		eventfd_ctx_put(vdev->ctx[vector].trigger);
 		vdev->ctx[vector].trigger = NULL;
@@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
 		return ret;
 	}
 
+	vdev->ctx[vector].producer.token = trigger;
+	vdev->ctx[vector].producer.irq = irq;
+	ret = irq_bypass_register_producer(&vdev->ctx[vector].producer);
+	if (unlikely(ret))
+		dev_info(&pdev->dev,
+		"irq bypass producer (token %p) registeration fails: %d\n",
+		vdev->ctx[vector].producer.token, ret);
+
 	vdev->ctx[vector].trigger = trigger;
 
 	return 0;
diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h
index ae0e1b4..0e7394f 100644
--- a/drivers/vfio/pci/vfio_pci_private.h
+++ b/drivers/vfio/pci/vfio_pci_private.h
@@ -13,6 +13,7 @@
 
 #include <linux/mutex.h>
 #include <linux/pci.h>
+#include <linux/irqbypass.h>
 
 #ifndef VFIO_PCI_PRIVATE_H
 #define VFIO_PCI_PRIVATE_H
@@ -29,6 +30,7 @@ struct vfio_pci_irq_ctx {
 	struct virqfd		*mask;
 	char			*name;
 	bool			masked;
+	struct irq_bypass_producer	producer;
 };
 
 struct vfio_pci_device {
-- 
2.1.0

  parent reply	other threads:[~2015-09-16  9:04 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-16  8:49 [PATCH v8 00/13] Add VT-d Posted-Interrupts support Feng Wu
2015-09-16  8:49 ` Feng Wu
2015-09-16  8:49 ` [PATCH v8 01/13] KVM: Extend struct pi_desc for VT-d Posted-Interrupts Feng Wu
2015-09-16  8:49   ` Feng Wu
2015-09-16  8:49 ` [PATCH v8 02/13] KVM: Add some helper functions for Posted-Interrupts Feng Wu
2015-09-16  8:49   ` Feng Wu
2015-09-16  8:49 ` [PATCH v8 03/13] KVM: Define a new interface kvm_intr_is_single_vcpu() Feng Wu
2015-09-16  8:49   ` Feng Wu
2015-09-16  9:23   ` Paolo Bonzini
2015-09-16  9:23     ` Paolo Bonzini
2015-09-17  3:17     ` Wu, Feng
2015-09-17  3:17       ` Wu, Feng
2015-09-17  9:42       ` Paolo Bonzini
2015-09-17 13:36         ` Wu, Feng
2015-09-17 13:36           ` Wu, Feng
2015-09-17 14:24           ` Paolo Bonzini
2015-09-17 14:24             ` Paolo Bonzini
2015-09-17 15:58             ` Radim Krčmář
2015-09-17 16:00               ` Paolo Bonzini
2015-09-17 16:00                 ` Paolo Bonzini
2015-09-17 23:18                 ` Wu, Feng
2015-09-17 23:18                   ` Wu, Feng
2015-09-18 16:16                   ` Radim Krčmář
2015-09-18 16:16                     ` Radim Krčmář
2015-09-18 16:17                     ` Paolo Bonzini
2015-09-18 16:17                       ` Paolo Bonzini
2015-09-17 23:15             ` Wu, Feng
2015-09-17 23:15               ` Wu, Feng
2015-09-16  8:50 ` [PATCH v8 04/13] KVM: Make struct kvm_irq_routing_table accessible Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  8:50 ` [PATCH v8 05/13] KVM: make kvm_set_msi_irq() public Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  8:50 ` Feng Wu [this message]
2015-09-16  8:50   ` [PATCH v8 06/13] vfio: Register/unregister irq_bypass_producer Feng Wu
2015-09-16  8:50 ` [PATCH v8 07/13] KVM: x86: Update IRTE for posted-interrupts Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  8:50 ` [PATCH v8 08/13] KVM: Implement IRQ bypass consumer callbacks for x86 Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  8:50 ` [PATCH v8 09/13] KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd' Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  9:27   ` Paolo Bonzini
2015-09-16  9:27     ` Paolo Bonzini
2015-09-17  1:51     ` Wu, Feng
2015-09-17  1:51       ` Wu, Feng
2015-09-17  9:38       ` Paolo Bonzini
2015-09-17  9:38         ` Paolo Bonzini
2015-09-16  8:50 ` [PATCH v8 10/13] KVM: Update Posted-Interrupts Descriptor when vCPU is preempted Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  9:29   ` Paolo Bonzini
2015-09-16  9:29     ` Paolo Bonzini
2015-09-16  8:50 ` [PATCH v8 11/13] KVM: Update Posted-Interrupts Descriptor when vCPU is blocked Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  9:32   ` Paolo Bonzini
2015-09-16  9:32     ` Paolo Bonzini
2015-09-16  8:50 ` [PATCH v8 12/13] KVM: Warn if 'SN' is set during posting interrupts by software Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  9:32   ` Paolo Bonzini
2015-09-16  9:32     ` Paolo Bonzini
2015-09-16  8:50 ` [PATCH v8 13/13] iommu/vt-d: Add a command line parameter for VT-d posted-interrupts Feng Wu
2015-09-16  8:50   ` Feng Wu
2015-09-16  9:34 ` [PATCH v8 00/13] Add VT-d Posted-Interrupts support Paolo Bonzini
2015-09-16  9:34   ` Paolo Bonzini

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=1442393409-2623-7-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.