Hi Rick, On 21/10/2016 06:42, Rick Song wrote: > The issues happened when the interrupt is a edge > sensitive interrupt, Please could you describe what are the issues? Why do we need to have a different behavior wrt auto-enable between level and edge sensitive IRQs. Do you have a reset module for your device? I did not see any patch for this latter? Added Baptiste in CC. Thanks Eric so only set IRQ_NOAUTOEN and > enable irq manually if the interrupt is an level > sensitive interrupt. > > Signed-off-by: Rick Song <songwenjun@xxxxxxxxxx> > --- > drivers/vfio/platform/vfio_platform_irq.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/vfio/platform/vfio_platform_irq.c b/drivers/vfio/platform/vfio_platform_irq.c > index 46d4750..a7b4b2e 100644 > --- a/drivers/vfio/platform/vfio_platform_irq.c > +++ b/drivers/vfio/platform/vfio_platform_irq.c > @@ -185,7 +185,8 @@ static int vfio_set_trigger(struct vfio_platform_device *vdev, int index, > int ret; > > if (irq->trigger) { > - irq_clear_status_flags(irq->hwirq, IRQ_NOAUTOEN); > + if (irq->flags & VFIO_IRQ_INFO_AUTOMASKED) > + irq_clear_status_flags(irq->hwirq, IRQ_NOAUTOEN); > free_irq(irq->hwirq, irq); > kfree(irq->name); > eventfd_ctx_put(irq->trigger); > @@ -208,7 +209,9 @@ static int vfio_set_trigger(struct vfio_platform_device *vdev, int index, > > irq->trigger = trigger; > > - irq_set_status_flags(irq->hwirq, IRQ_NOAUTOEN); > + if (irq->flags & VFIO_IRQ_INFO_AUTOMASKED) > + irq_set_status_flags(irq->hwirq, IRQ_NOAUTOEN); > + > ret = request_irq(irq->hwirq, handler, 0, irq->name, irq); > if (ret) { > kfree(irq->name); > @@ -217,7 +220,7 @@ static int vfio_set_trigger(struct vfio_platform_device *vdev, int index, > return ret; > } > > - if (!irq->masked) > + if ((irq->flags & VFIO_IRQ_INFO_AUTOMASKED) && !irq->masked) > enable_irq(irq->hwirq); > > return 0; > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html