On Mon, Sep 01, 2014 at 02:52:43PM +0200, Eric Auger wrote:
> In case the IRQ is forwarded, the VFIO platform IRQ handler does not
> need to disable the IRQ anymore. In that mode, when the handler completes

add a comma after completes

> the IRQ is not deactivated but only its priority is lowered.
> 
> Some other actor (typically a guest) is supposed to deactivate the IRQ,
> allowing at that time a new physical IRQ to hit.
> 
> In virtualization use case, the physical IRQ is automatically completed
> by the interrupt controller when the guest completes the corresponding
> virtual IRQ.
> 
> Signed-off-by: Eric Auger <eric.au...@linaro.org>
> ---
>  drivers/vfio/platform/vfio_platform_irq.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/vfio/platform/vfio_platform_irq.c 
> b/drivers/vfio/platform/vfio_platform_irq.c
> index 6768508..1f851b2 100644
> --- a/drivers/vfio/platform/vfio_platform_irq.c
> +++ b/drivers/vfio/platform/vfio_platform_irq.c
> @@ -88,13 +88,18 @@ static irqreturn_t vfio_irq_handler(int irq, void *dev_id)
>       struct vfio_platform_irq *irq_ctx = dev_id;
>       unsigned long flags;
>       int ret = IRQ_NONE;
> +     struct irq_data *d;
> +     bool is_forwarded;
>  
>       spin_lock_irqsave(&irq_ctx->lock, flags);
>  
>       if (!irq_ctx->masked) {
>               ret = IRQ_HANDLED;
> +             d = irq_get_irq_data(irq_ctx->hwirq);
> +             is_forwarded = irqd_irq_forwarded(d);
>  
> -             if (irq_ctx->flags & VFIO_IRQ_INFO_AUTOMASKED) {
> +             if (irq_ctx->flags & VFIO_IRQ_INFO_AUTOMASKED &&
> +                                             !is_forwarded) {
>                       disable_irq_nosync(irq_ctx->hwirq);
>                       irq_ctx->masked = true;
>               }
> -- 
> 1.9.1
> 
It makes sense that these needs to be all controlled in the kernel, but
I'm wondering if it would be cleaner / more correct to clear the
AUTOMASKED flag when the IRQ is forwarded and have vfio refuse setting
this flag as long as the irq is forwarded?

-Christoffer
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to