From: Antonios Motakis <a.motakis@virtualopensystems.com>
To: kvmarm@lists.cs.columbia.edu, iommu@lists.linux-foundation.org,
alex.williamson@redhat.com
Cc: will.deacon@arm.com, tech@virtualopensystems.com,
christoffer.dall@linaro.org, eric.auger@linaro.org,
kim.phillips@freescale.com, marc.zyngier@arm.com,
Antonios Motakis <a.motakis@virtualopensystems.com>,
Alexander Gordeev <agordeev@redhat.com>,
Bjorn Helgaas <bhelgaas@google.com>,
kvm@vger.kernel.org (open list:VFIO DRIVER),
linux-kernel@vger.kernel.org (open list)
Subject: [PATCH v9 16/19] vfio: pass an opaque pointer on virqfd initialization
Date: Mon, 27 Oct 2014 19:08:01 +0100 [thread overview]
Message-ID: <1414433284-31719-17-git-send-email-a.motakis@virtualopensystems.com> (raw)
In-Reply-To: <1414433284-31719-1-git-send-email-a.motakis@virtualopensystems.com>
VFIO_PCI passes the VFIO device structure *vdev via eventfd to the handler
that implements masking/unmasking of IRQs via an eventfd. We can replace
it in the virqfd infrastructure with an opaque type so we can make use
of the mechanism from other VFIO bus drivers.
Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com>
---
drivers/vfio/pci/vfio_pci_intrs.c | 11 +++++++----
drivers/vfio/virqfd.c | 17 ++++++++---------
include/linux/vfio.h | 12 ++++++------
3 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index e56c814..6ca22a8 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -27,8 +27,10 @@
/*
* INTx
*/
-static void vfio_send_intx_eventfd(struct vfio_pci_device *vdev, void *unused)
+static void vfio_send_intx_eventfd(void *opaque, void *unused)
{
+ struct vfio_pci_device *vdev = opaque;
+
if (likely(is_intx(vdev) && !vdev->virq_disabled))
eventfd_signal(vdev->ctx[0].trigger, 1);
}
@@ -71,9 +73,9 @@ void vfio_pci_intx_mask(struct vfio_pci_device *vdev)
* a signal is necessary, which can then be handled via a work queue
* or directly depending on the caller.
*/
-static int vfio_pci_intx_unmask_handler(struct vfio_pci_device *vdev,
- void *unused)
+static int vfio_pci_intx_unmask_handler(void *opaque, void *unused)
{
+ struct vfio_pci_device *vdev = opaque;
struct pci_dev *pdev = vdev->pdev;
unsigned long flags;
int ret = 0;
@@ -411,7 +413,8 @@ static int vfio_pci_set_intx_unmask(struct vfio_pci_device *vdev,
} else if (flags & VFIO_IRQ_SET_DATA_EVENTFD) {
int32_t fd = *(int32_t *)data;
if (fd >= 0)
- return virqfd_enable(vdev, vfio_pci_intx_unmask_handler,
+ return virqfd_enable((void *) vdev,
+ vfio_pci_intx_unmask_handler,
vfio_send_intx_eventfd, NULL,
&vdev->ctx[0].unmask, fd);
diff --git a/drivers/vfio/virqfd.c b/drivers/vfio/virqfd.c
index 27fa2f0..ac63ec0 100644
--- a/drivers/vfio/virqfd.c
+++ b/drivers/vfio/virqfd.c
@@ -14,7 +14,6 @@
#include <linux/eventfd.h>
#include <linux/file.h>
#include <linux/slab.h>
-#include "pci/vfio_pci_private.h"
static struct workqueue_struct *vfio_irqfd_cleanup_wq;
static spinlock_t lock;
@@ -49,7 +48,7 @@ static int virqfd_wakeup(wait_queue_t *wait, unsigned mode, int sync, void *key)
if (flags & POLLIN) {
/* An event has been signaled, call function */
if ((!virqfd->handler ||
- virqfd->handler(virqfd->vdev, virqfd->data)) &&
+ virqfd->handler(virqfd->opaque, virqfd->data)) &&
virqfd->thread)
schedule_work(&virqfd->inject);
}
@@ -99,13 +98,13 @@ static void virqfd_inject(struct work_struct *work)
{
struct virqfd *virqfd = container_of(work, struct virqfd, inject);
if (virqfd->thread)
- virqfd->thread(virqfd->vdev, virqfd->data);
+ virqfd->thread(virqfd->opaque, virqfd->data);
}
-int virqfd_enable(struct vfio_pci_device *vdev,
- int (*handler)(struct vfio_pci_device *, void *),
- void (*thread)(struct vfio_pci_device *, void *),
- void *data, struct virqfd **pvirqfd, int fd)
+int virqfd_enable(void *opaque,
+ int (*handler)(void *, void *),
+ void (*thread)(void *, void *),
+ void *data, struct virqfd **pvirqfd, int fd)
{
struct fd irqfd;
struct eventfd_ctx *ctx;
@@ -118,7 +117,7 @@ int virqfd_enable(struct vfio_pci_device *vdev,
return -ENOMEM;
virqfd->pvirqfd = pvirqfd;
- virqfd->vdev = vdev;
+ virqfd->opaque = opaque;
virqfd->handler = handler;
virqfd->thread = thread;
virqfd->data = data;
@@ -171,7 +170,7 @@ int virqfd_enable(struct vfio_pci_device *vdev,
* before we registered and trigger it as if we didn't miss it.
*/
if (events & POLLIN) {
- if ((!handler || handler(vdev, data)) && thread)
+ if ((!handler || handler(opaque, data)) && thread)
schedule_work(&virqfd->inject);
}
diff --git a/include/linux/vfio.h b/include/linux/vfio.h
index fb6037b..ce23a42 100644
--- a/include/linux/vfio.h
+++ b/include/linux/vfio.h
@@ -128,10 +128,10 @@ static inline long vfio_spapr_iommu_eeh_ioctl(struct iommu_group *group,
* IRQFD support
*/
struct virqfd {
- struct vfio_pci_device *vdev;
+ void *opaque;
struct eventfd_ctx *eventfd;
- int (*handler)(struct vfio_pci_device *, void *);
- void (*thread)(struct vfio_pci_device *, void *);
+ int (*handler)(void *, void *);
+ void (*thread)(void *, void *);
void *data;
struct work_struct inject;
wait_queue_t wait;
@@ -142,9 +142,9 @@ struct virqfd {
extern int vfio_pci_virqfd_init(void);
extern void vfio_pci_virqfd_exit(void);
-extern int virqfd_enable(struct vfio_pci_device *vdev,
- int (*handler)(struct vfio_pci_device *, void *),
- void (*thread)(struct vfio_pci_device *, void *),
+extern int virqfd_enable(void *opaque,
+ int (*handler)(void *, void *),
+ void (*thread)(void *, void *),
void *data, struct virqfd **pvirqfd, int fd);
extern void virqfd_disable(struct virqfd **pvirqfd);
--
2.1.1
next prev parent reply other threads:[~2014-10-27 18:10 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1414433284-31719-1-git-send-email-a.motakis@virtualopensystems.com>
2014-10-27 18:07 ` [PATCH v9 01/19] vfio/platform: initial skeleton of VFIO support for platform devices Antonios Motakis
[not found] ` <546330DE.5010002@linaro.org>
2014-11-12 16:49 ` Alex Williamson
2014-11-20 14:10 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 02/19] vfio: platform: probe to devices on the platform bus Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 03/19] vfio: platform: add the VFIO PLATFORM module to Kconfig Antonios Motakis
2014-11-12 9:52 ` Hongbo Zhang
2014-11-12 9:57 ` Antonios Motakis
2014-11-13 8:05 ` Hongbo Zhang
2014-11-20 14:10 ` Antonios Motakis
[not found] ` <CAOhR-w2N3SF=3DTgFr22JfAKDXxzz0PASznJaRjK3oBrRTVcsw@mail.gmail.com>
[not found] ` <d3c4a63eaa294f1987a797a39eed4650@BN3PR0301MB1265.namprd03.prod.outlook.com>
2014-11-12 10:38 ` Hongbo Zhang
2014-11-12 11:00 ` Bharat.Bhushan
2014-11-12 11:17 ` Hongbo Zhang
2014-10-27 18:07 ` [PATCH v9 04/19] vfio: amba: VFIO support for AMBA devices Antonios Motakis
2014-10-31 18:40 ` Alex Williamson
2014-11-05 9:50 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 05/19] vfio: amba: add the VFIO for AMBA devices module to Kconfig Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 06/19] vfio/platform: return info for bound device Antonios Motakis
[not found] ` <5463373C.2010202@linaro.org>
2014-11-12 16:36 ` Alex Williamson
2014-11-20 14:10 ` Antonios Motakis
2014-11-20 14:26 ` Eric Auger
2014-10-27 18:07 ` [PATCH v9 07/19] vfio/platform: return info for device memory mapped IO regions Antonios Motakis
2014-10-31 18:58 ` Alex Williamson
2014-11-05 9:50 ` Antonios Motakis
[not found] ` <54633D5B.4040204@linaro.org>
2014-11-20 14:11 ` Antonios Motakis
2014-11-24 15:53 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 08/19] vfio/platform: read and write support for the device fd Antonios Motakis
[not found] ` <546380DD.8000802@linaro.org>
2014-11-20 14:11 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 09/19] vfio/platform: support MMAP of MMIO regions Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 10/19] vfio/platform: return IRQ info Antonios Motakis
2014-10-31 19:11 ` Alex Williamson
2014-11-05 10:04 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 11/19] vfio/platform: initial interrupts support code Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 12/19] vfio/platform: trigger an interrupt via eventfd Antonios Motakis
2014-10-31 19:36 ` Alex Williamson
2014-11-05 10:08 ` Antonios Motakis
[not found] ` <54636D25.6060009@linaro.org>
2014-11-20 14:11 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 13/19] vfio/platform: support for level sensitive interrupts Antonios Motakis
2014-10-31 19:36 ` Alex Williamson
2014-11-05 10:10 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 14/19] vfio: move eventfd support code for VFIO_PCI to a separate file Antonios Motakis
2014-10-27 19:16 ` Bjorn Helgaas
2014-10-31 16:03 ` Antonios Motakis
2014-10-27 18:08 ` [PATCH v9 15/19] vfio: add local lock in virqfd instead of depending on VFIO PCI Antonios Motakis
2014-10-31 19:43 ` Alex Williamson
2014-11-05 10:04 ` Antonios Motakis
2014-10-27 18:08 ` Antonios Motakis [this message]
2014-10-27 18:08 ` [PATCH v9 17/19] vfio: virqfd: add vfio_ prefix to virqfd_enable and virqfd_disable Antonios Motakis
2014-10-27 20:12 ` Bjorn Helgaas
2014-10-31 16:06 ` Antonios Motakis
2014-10-27 18:08 ` [PATCH v9 18/19] vfio: initialize the virqfd workqueue in VFIO generic code Antonios Motakis
2014-10-27 18:08 ` [PATCH v9 19/19] vfio/platform: implement IRQ masking/unmasking via an eventfd Antonios Motakis
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=1414433284-31719-17-git-send-email-a.motakis@virtualopensystems.com \
--to=a.motakis@virtualopensystems.com \
--cc=agordeev@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=bhelgaas@google.com \
--cc=christoffer.dall@linaro.org \
--cc=eric.auger@linaro.org \
--cc=iommu@lists.linux-foundation.org \
--cc=kim.phillips@freescale.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=tech@virtualopensystems.com \
--cc=will.deacon@arm.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
Powered by JetHome