From: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
To: kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: "open list:VFIO DRIVER"
<kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
marc.zyngier-5wv7dgnIgG8@public.gmane.org,
will.deacon-5wv7dgnIgG8@public.gmane.org,
Gavin Shan
<gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>,
open list <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Alexander Gordeev
<agordeev-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
Antonios Motakis
<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>,
tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Subject: [PATCH v10 17/20] vfio: pass an opaque pointer on virqfd initialization
Date: Thu, 27 Nov 2014 18:32:57 +0100 [thread overview]
Message-ID: <1417109580-10505-18-git-send-email-a.motakis@virtualopensystems.com> (raw)
In-Reply-To: <1417109580-10505-1-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
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-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
---
drivers/vfio/pci/vfio_pci_intrs.c | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index 61505c1c..86bdcd6 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -31,10 +31,10 @@
* IRQfd - generic
*/
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;
@@ -74,7 +74,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);
}
@@ -124,12 +124,12 @@ 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 vfio_virqfd_enable(struct vfio_pci_device *vdev,
- int (*handler)(struct vfio_pci_device *, void *),
- void (*thread)(struct vfio_pci_device *, void *),
+int vfio_virqfd_enable(void *opaque,
+ int (*handler)(void *, void *),
+ void (*thread)(void *, void *),
void *data, struct virqfd **pvirqfd, int fd)
{
struct fd irqfd;
@@ -143,7 +143,7 @@ int vfio_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;
@@ -196,7 +196,7 @@ int vfio_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);
}
@@ -243,8 +243,10 @@ EXPORT_SYMBOL_GPL(vfio_virqfd_disable);
/*
* 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);
}
@@ -287,9 +289,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;
@@ -641,7 +643,7 @@ 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 vfio_virqfd_enable(vdev,
+ return vfio_virqfd_enable((void *) vdev,
vfio_pci_intx_unmask_handler,
vfio_send_intx_eventfd, NULL,
&vdev->ctx[0].unmask, fd);
--
2.1.3
next prev parent reply other threads:[~2014-11-27 17:32 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-27 17:32 [PATCH v10 00/20] VFIO support for platform and ARM AMBA devices Antonios Motakis
[not found] ` <1417109580-10505-1-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-11-27 17:32 ` [PATCH v10 01/20] vfio/platform: initial skeleton of VFIO support for platform devices Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 02/20] vfio: platform: probe to devices on the platform bus Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 03/20] vfio: platform: add the VFIO PLATFORM module to Kconfig Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 04/20] vfio: amba: VFIO support for AMBA devices Antonios Motakis
[not found] ` <1417109580-10505-5-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-12-09 14:18 ` Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 05/20] vfio: amba: add the VFIO for AMBA devices module to Kconfig Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 06/20] vfio/platform: return info for bound device Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 07/20] vfio/platform: return info for device memory mapped IO regions Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 08/20] vfio/platform: read and write support for the device fd Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 09/20] vfio/platform: support MMAP of MMIO regions Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 10/20] vfio/platform: return IRQ info Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 11/20] vfio/platform: initial interrupts support code Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 12/20] vfio/platform: trigger an interrupt via eventfd Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 13/20] vfio/platform: support for level sensitive interrupts Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 14/20] vfio: add a vfio_ prefix to virqfd_enable and virqfd_disable and export Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 15/20] vfio: virqfd: rename vfio_pci_virqfd_init and vfio_pci_virqfd_exit Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 16/20] vfio: add local lock for virqfd instead of depending on VFIO PCI Antonios Motakis
2014-11-27 17:32 ` Antonios Motakis [this message]
2014-11-27 17:32 ` [PATCH v10 18/20] vfio: move eventfd support code for VFIO_PCI to a separate file Antonios Motakis
2014-11-27 17:32 ` [PATCH v10 19/20] vfio: initialize the virqfd workqueue in VFIO generic code Antonios Motakis
2014-11-27 17:33 ` [PATCH v10 20/20] vfio/platform: implement IRQ masking/unmasking via an eventfd Antonios Motakis
2014-11-28 18:05 ` [PATCH v10 00/20] VFIO support for platform and ARM AMBA devices Eric Auger
[not found] ` <5478B963.5050707-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-12-01 12:45 ` Antonios Motakis
[not found] ` <CAG8rG2wAt-wa26wBPA+2stb+Xn=B52thd8osRHWQm9WeQZbO1Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-01 14:29 ` Eric Auger
2014-12-07 19:12 ` Alex Williamson
[not found] ` <1417979565.1095.22.camel-xdHQ/5r00wBBDLzU/O5InQ@public.gmane.org>
2014-12-09 14:24 ` Antonios Motakis
[not found] ` <CAG8rG2wB9KtjYGEL91TDS9AiKFHjPHJKjqyRPJj7wqKP6c+Knw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-09 15:08 ` Alex Williamson
[not found] ` <1418137697.1095.126.camel-xdHQ/5r00wBBDLzU/O5InQ@public.gmane.org>
2014-12-10 14:00 ` 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=1417109580-10505-18-git-send-email-a.motakis@virtualopensystems.com \
--to=a.motakis-lrhrjnjw1ufhk3s98ze1ajgjjy/sre9j@public.gmane.org \
--cc=agordeev-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=gwshan-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=marc.zyngier-5wv7dgnIgG8@public.gmane.org \
--cc=tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
/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