From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
kvmarm@lists.cs.columbia.edu, alex.williamson@redhat.com,
pbonzini@redhat.com, marc.zyngier@arm.com,
christoffer.dall@linaro.org
Cc: drjones@redhat.com, wei@redhat.com
Subject: [PATCH 05/10] VFIO: pci: Introduce direct EOI INTx interrupt handler
Date: Wed, 24 May 2017 22:13:18 +0200 [thread overview]
Message-ID: <1495656803-28011-6-git-send-email-eric.auger@redhat.com> (raw)
In-Reply-To: <1495656803-28011-1-git-send-email-eric.auger@redhat.com>
We add two new fields in vfio_pci_irq_ctx struct: deoi and handler.
If deoi is set, this means the physical IRQ attached to the virtual
IRQ is directly deactivated by the guest and the VFIO driver does
not need to disable the physical IRQ and mask it at VFIO level.
The handler pointer is set accordingly and a wrapper handler is
introduced that calls the chosen handler function.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
---
drivers/vfio/pci/vfio_pci_intrs.c | 32 ++++++++++++++++++++++++++------
drivers/vfio/pci/vfio_pci_private.h | 2 ++
2 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index d4d377b..06aa713 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -121,11 +121,8 @@ void vfio_pci_intx_unmask(struct vfio_pci_device *vdev)
static irqreturn_t vfio_intx_handler(int irq, void *dev_id)
{
struct vfio_pci_device *vdev = dev_id;
- unsigned long flags;
int ret = IRQ_NONE;
- spin_lock_irqsave(&vdev->irqlock, flags);
-
if (!vdev->pci_2_3) {
disable_irq_nosync(vdev->pdev->irq);
vdev->ctx[0].automasked = true;
@@ -137,14 +134,33 @@ static irqreturn_t vfio_intx_handler(int irq, void *dev_id)
ret = IRQ_HANDLED;
}
- spin_unlock_irqrestore(&vdev->irqlock, flags);
-
if (ret == IRQ_HANDLED)
vfio_send_intx_eventfd(vdev, NULL);
return ret;
}
+static irqreturn_t vfio_intx_handler_deoi(int irq, void *dev_id)
+{
+ struct vfio_pci_device *vdev = dev_id;
+
+ vfio_send_intx_eventfd(vdev, NULL);
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t vfio_intx_wrapper_handler(int irq, void *dev_id)
+{
+ struct vfio_pci_device *vdev = dev_id;
+ unsigned long flags;
+ irqreturn_t ret;
+
+ spin_lock_irqsave(&vdev->irqlock, flags);
+ ret = vdev->ctx[0].handler(irq, dev_id);
+ spin_unlock_irqrestore(&vdev->irqlock, flags);
+
+ return ret;
+}
+
static int vfio_intx_enable(struct vfio_pci_device *vdev)
{
if (!is_irq_none(vdev))
@@ -208,7 +224,11 @@ static int vfio_intx_set_signal(struct vfio_pci_device *vdev, int fd)
if (!vdev->pci_2_3)
irqflags = 0;
- ret = request_irq(pdev->irq, vfio_intx_handler,
+ if (vdev->ctx[0].deoi)
+ vdev->ctx[0].handler = vfio_intx_handler_deoi;
+ else
+ vdev->ctx[0].handler = vfio_intx_handler;
+ ret = request_irq(pdev->irq, vfio_intx_wrapper_handler,
irqflags, vdev->ctx[0].name, vdev);
if (ret) {
vdev->ctx[0].trigger = NULL;
diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h
index f7f1101..5cfe59a 100644
--- a/drivers/vfio/pci/vfio_pci_private.h
+++ b/drivers/vfio/pci/vfio_pci_private.h
@@ -36,6 +36,8 @@ struct vfio_pci_irq_ctx {
char *name;
bool masked;
bool automasked;
+ bool deoi;
+ irqreturn_t (*handler)(int irq, void *dev_id);
struct irq_bypass_producer producer;
};
--
2.5.5
next prev parent reply other threads:[~2017-05-24 20:14 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-24 20:13 [PATCH 00/10] ARM/ARM64 Direct EOI setup for VFIO wired interrupts Eric Auger
2017-05-24 20:13 ` [PATCH 01/10] vfio: platform: Add automasked field to vfio_platform_irq Eric Auger
2017-05-25 18:05 ` Marc Zyngier
2017-05-30 12:45 ` Auger Eric
2017-05-31 17:41 ` Alex Williamson
2017-05-24 20:13 ` [PATCH 02/10] VFIO: platform: Introduce direct EOI interrupt handler Eric Auger
2017-05-31 18:20 ` Alex Williamson
2017-05-24 20:13 ` [PATCH 03/10] VFIO: platform: Direct EOI irq bypass for ARM/ARM64 Eric Auger
2017-05-31 18:20 ` Alex Williamson
2017-05-31 19:31 ` Auger Eric
2017-06-01 10:49 ` Marc Zyngier
2017-05-24 20:13 ` [PATCH 04/10] VFIO: pci: Add automasked field to vfio_pci_irq_ctx Eric Auger
2017-05-31 18:21 ` Alex Williamson
2017-05-24 20:13 ` Eric Auger [this message]
2017-05-31 18:24 ` [PATCH 05/10] VFIO: pci: Introduce direct EOI INTx interrupt handler Alex Williamson
2017-06-01 20:40 ` Auger Eric
2017-06-02 8:41 ` Marc Zyngier
2017-06-14 8:07 ` Auger Eric
2017-06-14 8:41 ` Marc Zyngier
2017-05-24 20:13 ` [PATCH 06/10] irqbypass: Add a private field in the producer Eric Auger
2017-05-24 20:13 ` [PATCH 07/10] VFIO: pci: Direct EOI irq bypass for ARM/ARM64 Eric Auger
2017-05-24 20:13 ` [PATCH 08/10] KVM: arm/arm64: vgic: Handle unshared mapped interrupts Eric Auger
2017-05-25 19:14 ` Marc Zyngier
2017-05-30 12:50 ` Auger Eric
2017-06-02 13:33 ` Christoffer Dall
2017-06-02 14:10 ` Marc Zyngier
2017-06-02 16:29 ` Christoffer Dall
2017-06-08 8:23 ` Marc Zyngier
2017-06-08 8:34 ` Christoffer Dall
2017-06-08 8:55 ` Auger Eric
2017-06-08 10:14 ` Christoffer Dall
2017-06-08 8:49 ` Auger Eric
2017-06-08 10:11 ` Christoffer Dall
2017-05-24 20:13 ` [PATCH 09/10] KVM: arm/arm64: vgic: Implement forwarding setting Eric Auger
2017-05-25 19:19 ` Marc Zyngier
2017-05-30 12:54 ` Auger Eric
2017-05-30 13:17 ` Marc Zyngier
2017-05-30 14:03 ` Auger Eric
2017-05-24 20:13 ` [PATCH 10/10] KVM: arm/arm64: register DEOI irq bypass consumer on ARM/ARM64 Eric Auger
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=1495656803-28011-6-git-send-email-eric.auger@redhat.com \
--to=eric.auger@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=christoffer.dall@linaro.org \
--cc=drjones@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=pbonzini@redhat.com \
--cc=wei@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).