From: Eric Auger <eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: Alex Williamson
<alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Antonios Motakis
<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
Cc: VFIO DRIVER <kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
marc.zyngier-5wv7dgnIgG8@public.gmane.org,
will.deacon-5wv7dgnIgG8@public.gmane.org,
open list <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org,
kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Subject: Re: [PATCH v9 13/19] vfio/platform: support for level sensitive interrupts
Date: Wed, 12 Nov 2014 16:03:36 +0100 [thread overview]
Message-ID: <546376C8.1040101@linaro.org> (raw)
In-Reply-To: <1414784196.27420.328.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
On 10/31/2014 08:36 PM, Alex Williamson wrote:
> On Mon, 2014-10-27 at 19:07 +0100, Antonios Motakis wrote:
>> Level sensitive interrupts are exposed as maskable and automasked
>> interrupts and are masked and disabled automatically when they fire.
>>
>> Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
>> ---
>> drivers/vfio/platform/vfio_platform_irq.c | 102 +++++++++++++++++++++++++-
>> drivers/vfio/platform/vfio_platform_private.h | 2 +
>> 2 files changed, 100 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/vfio/platform/vfio_platform_irq.c b/drivers/vfio/platform/vfio_platform_irq.c
>> index 2ac8ed7..563abf6 100644
>> --- a/drivers/vfio/platform/vfio_platform_irq.c
>> +++ b/drivers/vfio/platform/vfio_platform_irq.c
>> @@ -31,18 +31,108 @@
>>
>> #include "vfio_platform_private.h"
>>
>> +static void vfio_platform_mask(struct vfio_platform_irq *irq_ctx)
>> +{
>> + unsigned long flags;
>> +
>> + spin_lock_irqsave(&irq_ctx->lock, flags);
>> +
>> + if (!irq_ctx->masked) {
>> + disable_irq(irq_ctx->hwirq);
>> + irq_ctx->masked = true;
>> + }
>> +
>> + spin_unlock_irqrestore(&irq_ctx->lock, flags);
>> +}
>> +
>> static int vfio_platform_set_irq_mask(struct vfio_platform_device *vdev,
>> unsigned index, unsigned start,
>> unsigned count, uint32_t flags, void *data)
>> {
>> - return -EINVAL;
>> + if (start != 0 || count != 1)
>> + return -EINVAL;
>> +
>> + if (!(vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE))
>> + return -EINVAL;
>> +
>> + if (flags & VFIO_IRQ_SET_DATA_EVENTFD)
>> + return -EINVAL; /* not implemented yet */
>> +
>> + if (flags & VFIO_IRQ_SET_DATA_NONE) {
>> + vfio_platform_mask(&vdev->irqs[index]);
>> +
>> + } else if (flags & VFIO_IRQ_SET_DATA_BOOL) {
>> + uint8_t mask = *(uint8_t *)data;
>> +
>> + if (mask)
>> + vfio_platform_mask(&vdev->irqs[index]);
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static void vfio_platform_unmask(struct vfio_platform_irq *irq_ctx)
>> +{
>> + unsigned long flags;
>> +
>> + spin_lock_irqsave(&irq_ctx->lock, flags);
>> +
>> + if (irq_ctx->masked) {
>> + enable_irq(irq_ctx->hwirq);
>> + irq_ctx->masked = false;
>> + }
>> +
>> + spin_unlock_irqrestore(&irq_ctx->lock, flags);
>> }
>>
>> static int vfio_platform_set_irq_unmask(struct vfio_platform_device *vdev,
>> unsigned index, unsigned start,
>> unsigned count, uint32_t flags, void *data)
>> {
>> - return -EINVAL;
>> + if (start != 0 || count != 1)
>> + return -EINVAL;
>> +
>> + if (!(vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE))
>> + return -EINVAL;
>> +
>> + if (flags & VFIO_IRQ_SET_DATA_EVENTFD)
>> + return -EINVAL; /* not implemented yet */
>> +
>> + if (flags & VFIO_IRQ_SET_DATA_NONE) {
>> + vfio_platform_unmask(&vdev->irqs[index]);
>> +
>> + } else if (flags & VFIO_IRQ_SET_DATA_BOOL) {
>> + uint8_t unmask = *(uint8_t *)data;
>> +
>> + if (unmask)
>> + vfio_platform_unmask(&vdev->irqs[index]);
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static irqreturn_t vfio_maskable_irq_handler(int irq, void *dev_id)
>> +{
>> + struct vfio_platform_irq *irq_ctx = dev_id;
>> + unsigned long flags;
>> + int ret = IRQ_NONE;
>> +
>> + spin_lock_irqsave(&irq_ctx->lock, flags);
>> +
>> + if (!irq_ctx->masked) {
>> + ret = IRQ_HANDLED;
>> +
>> + /* automask maskable interrupts */
>> + disable_irq_nosync(irq_ctx->hwirq);
>> + irq_ctx->masked = true;
>> + }
>> +
>> + spin_unlock_irqrestore(&irq_ctx->lock, flags);
>> +
>> + if (ret == IRQ_HANDLED)
>> + eventfd_signal(irq_ctx->trigger, 1);
>> +
>> + return ret;
>
> This is not just a maskable irq handler, but specifically a level (aka
> automasked) handler. So this should only be used for AUTOMASKED irqs.
>
>> }
Antonios, Alex,
When turning forwarded IRQ modality on/off, I guess I now should the
swap the handlers (free_irq, request_irq) adding some extra complexity
in the driver compared to the previous implementation. Do you confirm
this is the preferred way?
Thanks
Eric
>>
>> static irqreturn_t vfio_irq_handler(int irq, void *dev_id)
>> @@ -103,7 +193,7 @@ static int vfio_platform_set_irq_trigger(struct vfio_platform_device *vdev,
>> irq_handler_t handler;
>>
>> if (vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE)
>> - return -EINVAL; /* not implemented */
>> + handler = vfio_maskable_irq_handler;
>
> As noted in the previous patch, this should be a test for AUTOMASKED,
> not just MASKABLE.
>
>> else
>> handler = vfio_irq_handler;
>>
>> @@ -175,13 +265,17 @@ int vfio_platform_irq_init(struct vfio_platform_device *vdev)
>> if (hwirq < 0)
>> goto err;
>>
>> + spin_lock_init(&vdev->irqs[i].lock);
>> +
>> vdev->irqs[i].flags = VFIO_IRQ_INFO_EVENTFD;
>>
>> if (irq_get_trigger_type(hwirq) & IRQ_TYPE_LEVEL_MASK)
>> - vdev->irqs[i].flags |= VFIO_IRQ_INFO_MASKABLE;
>> + vdev->irqs[i].flags |= VFIO_IRQ_INFO_MASKABLE
>> + | VFIO_IRQ_INFO_AUTOMASKED;
>>
>> vdev->irqs[i].count = 1;
>> vdev->irqs[i].hwirq = hwirq;
>> + vdev->irqs[i].masked = false;
>> }
>>
>> vdev->num_irqs = cnt;
>> diff --git a/drivers/vfio/platform/vfio_platform_private.h b/drivers/vfio/platform/vfio_platform_private.h
>> index a3f2411..d25c4cd 100644
>> --- a/drivers/vfio/platform/vfio_platform_private.h
>> +++ b/drivers/vfio/platform/vfio_platform_private.h
>> @@ -30,6 +30,8 @@ struct vfio_platform_irq {
>> int hwirq;
>> char *name;
>> struct eventfd_ctx *trigger;
>> + bool masked;
>> + spinlock_t lock;
>> };
>>
>> struct vfio_platform_region {
>
>
>
next prev parent reply other threads:[~2014-11-12 15:03 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-27 18:07 [PATCH v9 00/19] VFIO support for platform and AMBA devices on ARM Antonios Motakis
[not found] ` <1414433284-31719-1-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-27 18:07 ` [PATCH v9 01/19] vfio/platform: initial skeleton of VFIO support for platform devices Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-2-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-11-12 10:05 ` Eric Auger
[not found] ` <546330DE.5010002-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-12 16:49 ` Alex Williamson
2014-11-12 16:49 ` Alex Williamson
[not found] ` <1415810985.16601.361.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-20 14:10 ` Antonios Motakis
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 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 03/19] vfio: platform: add the VFIO PLATFORM module to Kconfig Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-4-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-11-12 9:38 ` Hongbo Zhang
[not found] ` <CAOhR-w2N3SF=3DTgFr22JfAKDXxzz0PASznJaRjK3oBrRTVcsw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-12 10:05 ` Bharat.Bhushan-KZfg59tc24xl57MIdRCFDg
2014-11-12 10:38 ` Hongbo Zhang
[not found] ` <CAOhR-w305sv-_D3QNCtifkzODTv0XoPKBEs6C2MRT1fPVKjZ8A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-12 11:00 ` Bharat.Bhushan-KZfg59tc24xl57MIdRCFDg
2014-11-12 11:00 ` Bharat.Bhushan
2014-11-12 11:17 ` Hongbo Zhang
2014-11-12 10:00 ` Eric Auger
2014-11-12 9:52 ` Hongbo Zhang
[not found] ` <CAOhR-w1nARQqtUX3nLBZYNg3PufDJMkOYeiJmpaz4fzPSZAmaQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-12 9:57 ` Antonios Motakis
2014-11-12 9:57 ` Antonios Motakis
2014-11-13 8:05 ` Hongbo Zhang
[not found] ` <CAOhR-w3pB9AfXODFfzv0VthnkPwW0d5DPoW26u1xGVCR1_W6RQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-20 14:10 ` Antonios Motakis
2014-11-20 14:10 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 04/19] vfio: amba: VFIO support for AMBA devices Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-5-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-31 18:40 ` Alex Williamson
2014-10-31 18:40 ` Alex Williamson
[not found] ` <1414780819.27420.314.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-05 9:50 ` Antonios Motakis
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 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 06/19] vfio/platform: return info for bound device Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-7-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-11-12 10:32 ` Eric Auger
[not found] ` <5463373C.2010202-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-12 16:36 ` Alex Williamson
2014-11-12 16:36 ` Alex Williamson
[not found] ` <1415810168.16601.353.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-20 14:10 ` Antonios Motakis
2014-11-20 14:10 ` Antonios Motakis
[not found] ` <CAG8rG2z_iCXEDGnfuZW_g+29NjhRXzUaDG3AUEVh1zvbf298BA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-20 14:26 ` Eric Auger
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-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-8-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-31 18:58 ` Alex Williamson
2014-10-31 18:58 ` Alex Williamson
[not found] ` <1414781936.27420.317.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-05 9:50 ` Antonios Motakis
2014-11-05 9:50 ` Antonios Motakis
2014-11-12 10:58 ` Eric Auger
[not found] ` <54633D5B.4040204-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-20 14:11 ` Antonios Motakis
2014-11-20 14:11 ` Antonios Motakis
[not found] ` <CAG8rG2wngS7+8yVQFydQzQkzzMKc8i9hcs2eH3+fKh+KZqmReQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-24 15:53 ` 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
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-9-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-11-12 15:46 ` Eric Auger
[not found] ` <546380DD.8000802-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-20 14:11 ` Antonios Motakis
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 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 10/19] vfio/platform: return IRQ info Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-11-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-31 19:11 ` Alex Williamson
2014-10-31 19:11 ` Alex Williamson
[not found] ` <1414782674.27420.320.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-05 10:04 ` Antonios Motakis
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 ` Antonios Motakis
2014-10-27 18:07 ` [PATCH v9 12/19] vfio/platform: trigger an interrupt via eventfd Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-13-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-31 19:36 ` Alex Williamson
2014-10-31 19:36 ` Alex Williamson
[not found] ` <1414784174.27420.327.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-05 10:08 ` Antonios Motakis
2014-11-05 10:08 ` Antonios Motakis
2014-11-12 14:22 ` Eric Auger
[not found] ` <54636D25.6060009-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-20 14:11 ` Antonios Motakis
2014-11-20 14:11 ` Antonios Motakis
2014-11-20 14:24 ` Eric Auger
2014-10-27 18:07 ` [PATCH v9 13/19] vfio/platform: support for level sensitive interrupts Antonios Motakis
2014-10-27 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-14-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-31 19:36 ` Alex Williamson
2014-10-31 19:36 ` Alex Williamson
[not found] ` <1414784196.27420.328.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-05 10:10 ` Antonios Motakis
2014-11-05 10:10 ` Antonios Motakis
2014-11-12 15:03 ` Eric Auger
2014-11-12 15:03 ` Eric Auger [this message]
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 18:07 ` Antonios Motakis
[not found] ` <1414433284-31719-15-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-27 19:16 ` Bjorn Helgaas
2014-10-27 19:16 ` Bjorn Helgaas
2014-10-27 19:16 ` Bjorn Helgaas
[not found] ` <CAErSpo55o00=YwtWChFaxC1tEAwv_A5nB90mDU9J6kpb9Tqf_Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-31 16:03 ` Antonios Motakis
2014-10-31 16:03 ` Antonios Motakis
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-27 18:08 ` Antonios Motakis
[not found] ` <1414433284-31719-16-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-31 19:43 ` Alex Williamson
2014-10-31 19:43 ` Alex Williamson
[not found] ` <1414784583.27420.330.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-11-05 10:04 ` Antonios Motakis
2014-11-05 10:04 ` Antonios Motakis
2014-10-27 18:08 ` [PATCH v9 16/19] vfio: pass an opaque pointer on virqfd initialization Antonios Motakis
2014-10-27 18:08 ` Antonios Motakis
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 18:08 ` Antonios Motakis
[not found] ` <1414433284-31719-18-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-10-27 20:12 ` Bjorn Helgaas
2014-10-27 20:12 ` Bjorn Helgaas
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 ` Antonios Motakis
2014-10-27 18:08 ` [PATCH v9 19/19] vfio/platform: implement IRQ masking/unmasking via an eventfd Antonios Motakis
2014-10-27 18:08 ` 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=546376C8.1040101@linaro.org \
--to=eric.auger-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@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 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.