linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] vfio/pci: Clear token on bypass registration failure
@ 2020-10-19 13:30 Alex Williamson
  2020-11-11  2:15 ` gchen chen
  0 siblings, 1 reply; 2+ messages in thread
From: Alex Williamson @ 2020-10-19 13:30 UTC (permalink / raw)
  To: alex.williamson; +Cc: linux-kernel, kvm, guomin_chen, gchen.guomin

The eventfd context is used as our irqbypass token, therefore if an
eventfd is re-used, our token is the same.  The irqbypass code will
return an -EBUSY in this case, but we'll still attempt to unregister
the producer, where if that duplicate token still exists, results in
removing the wrong object.  Clear the token of failed producers so
that they harmlessly fall out when unregistered.

Fixes: 6d7425f109d2 ("vfio: Register/unregister irq_bypass_producer")
Reported-by: guomin chen <guomin_chen@sina.com>
Tested-by: guomin chen <guomin_chen@sina.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---
 drivers/vfio/pci/vfio_pci_intrs.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index 1d9fb2592945..869dce5f134d 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -352,11 +352,13 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
 	vdev->ctx[vector].producer.token = trigger;
 	vdev->ctx[vector].producer.irq = irq;
 	ret = irq_bypass_register_producer(&vdev->ctx[vector].producer);
-	if (unlikely(ret))
+	if (unlikely(ret)) {
 		dev_info(&pdev->dev,
 		"irq bypass producer (token %p) registration fails: %d\n",
 		vdev->ctx[vector].producer.token, ret);
 
+		vdev->ctx[vector].producer.token = NULL;
+	}
 	vdev->ctx[vector].trigger = trigger;
 
 	return 0;


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] vfio/pci: Clear token on bypass registration failure
  2020-10-19 13:30 [PATCH] vfio/pci: Clear token on bypass registration failure Alex Williamson
@ 2020-11-11  2:15 ` gchen chen
  0 siblings, 0 replies; 2+ messages in thread
From: gchen chen @ 2020-11-11  2:15 UTC (permalink / raw)
  To: Alex Williamson; +Cc: linux-kernel, kvm, guomin_chen

Thanks a lot.

Alex Williamson <alex.williamson@redhat.com> 于2020年10月19日周一 下午9:30写道:
>
> The eventfd context is used as our irqbypass token, therefore if an
> eventfd is re-used, our token is the same.  The irqbypass code will
> return an -EBUSY in this case, but we'll still attempt to unregister
> the producer, where if that duplicate token still exists, results in
> removing the wrong object.  Clear the token of failed producers so
> that they harmlessly fall out when unregistered.
>
> Fixes: 6d7425f109d2 ("vfio: Register/unregister irq_bypass_producer")
> Reported-by: guomin chen <guomin_chen@sina.com>
> Tested-by: guomin chen <guomin_chen@sina.com>
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> ---
>  drivers/vfio/pci/vfio_pci_intrs.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
> index 1d9fb2592945..869dce5f134d 100644
> --- a/drivers/vfio/pci/vfio_pci_intrs.c
> +++ b/drivers/vfio/pci/vfio_pci_intrs.c
> @@ -352,11 +352,13 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
>         vdev->ctx[vector].producer.token = trigger;
>         vdev->ctx[vector].producer.irq = irq;
>         ret = irq_bypass_register_producer(&vdev->ctx[vector].producer);
> -       if (unlikely(ret))
> +       if (unlikely(ret)) {
>                 dev_info(&pdev->dev,
>                 "irq bypass producer (token %p) registration fails: %d\n",
>                 vdev->ctx[vector].producer.token, ret);
>
> +               vdev->ctx[vector].producer.token = NULL;
> +       }
>         vdev->ctx[vector].trigger = trigger;
>
>         return 0;
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-11-11  2:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-19 13:30 [PATCH] vfio/pci: Clear token on bypass registration failure Alex Williamson
2020-11-11  2:15 ` gchen chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).