* RE: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer
@ 2015-09-22 9:01 Wu, Feng
[not found] ` <E959C4978C3B6342920538CF579893F002726FF2-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
0 siblings, 1 reply; 16+ messages in thread
From: Wu, Feng @ 2015-09-22 9:01 UTC (permalink / raw)
To: Eric Auger, Paolo Bonzini,
alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org,
mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> -----Original Message-----
> From: linux-kernel-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> [mailto:linux-kernel-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org] On Behalf Of Eric Auger
> Sent: Tuesday, September 22, 2015 3:46 AM
> To: Paolo Bonzini; Wu, Feng; alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org;
> mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
> Cc: kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org;
> linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer
>
> Hi,
> On 09/21/2015 03:02 PM, Paolo Bonzini wrote:
> >
> >
> > On 21/09/2015 14:53, Wu, Feng wrote:
> >>>>>> I think the point is that we cannot trigger the build of irqbypass
> >>>>>> manager inside KVM or VFIO, we need trigger the build at a high
> >>>>>> level and it should be built before VFIO and KVM. Any ideas?
> >>>>
> >>>> We can add virt/Makefile and build virt/lib/ directly, not through
> >>>> arch/x86/kvm.
> >> Thinking about this more, does that mean we need to add the virt directory
> >> in the top Makefile in Linux tree?
> >
> > Yes, it does.
> So I understand this will replace patches 2 & 3 then and will fix the
> arm64 issue then.
I just sent a patch to fix this build error. BTW, from the reply of Paolo, seems
he dropped patch 3 in this series, maybe he think it doesn't have much
relationship with other patches, so maybe you could include it in your series
when forwarded irq work gets ready.
Thanks,
Feng
>
> Thanks
>
> Eric
>
> >
> > Paolo
> >
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 16+ messages in thread[parent not found: <E959C4978C3B6342920538CF579893F002726FF2-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <E959C4978C3B6342920538CF579893F002726FF2-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2015-09-23 1:35 ` Eric Auger 0 siblings, 0 replies; 16+ messages in thread From: Eric Auger @ 2015-09-23 1:35 UTC (permalink / raw) To: Wu, Feng, Paolo Bonzini, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Hi Feng, On 09/22/2015 11:01 AM, Wu, Feng wrote: > > >> -----Original Message----- >> From: linux-kernel-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> [mailto:linux-kernel-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org] On Behalf Of Eric Auger >> Sent: Tuesday, September 22, 2015 3:46 AM >> To: Paolo Bonzini; Wu, Feng; alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; >> mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org >> Cc: kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; >> linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer >> >> Hi, >> On 09/21/2015 03:02 PM, Paolo Bonzini wrote: >>> >>> >>> On 21/09/2015 14:53, Wu, Feng wrote: >>>>>>>> I think the point is that we cannot trigger the build of irqbypass >>>>>>>> manager inside KVM or VFIO, we need trigger the build at a high >>>>>>>> level and it should be built before VFIO and KVM. Any ideas? >>>>>> >>>>>> We can add virt/Makefile and build virt/lib/ directly, not through >>>>>> arch/x86/kvm. >>>> Thinking about this more, does that mean we need to add the virt directory >>>> in the top Makefile in Linux tree? >>> >>> Yes, it does. >> So I understand this will replace patches 2 & 3 then and will fix the >> arm64 issue then. > > I just sent a patch to fix this build error. BTW, from the reply of Paolo, seems > he dropped patch 3 in this series, maybe he think it doesn't have much > relationship with other patches, so maybe you could include it in your series > when forwarded irq work gets ready. OK no problem. I moved that patch (modified according to the new compilation scheme) in the irq forwarding series. Thanks Eric > > Thanks, > Feng > >> >> Thanks >> >> Eric >> >>> >>> Paolo >>> >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v9 00/18] Add VT-d Posted-Interrupts support - including prerequisite series
@ 2015-09-18 14:29 Feng Wu
[not found] ` <1442586596-5920-1-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 16+ messages in thread
From: Feng Wu @ 2015-09-18 14:29 UTC (permalink / raw)
To: pbonzini-H+wXaHxf7aLQT0dZR+AlfA,
alex.williamson-H+wXaHxf7aLQT0dZR+AlfA,
joro-zLv9SwRftAIdnm+yROfE0A, mtosatti-H+wXaHxf7aLQT0dZR+AlfA
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, kvm-u79uwXL29TY76Z2rM5mHXA,
eric.auger-QSEj5FYQhm4dnm+yROfE0A
VT-d Posted-Interrupts is an enhancement to CPU side Posted-Interrupt.
With VT-d Posted-Interrupts enabled, external interrupts from
direct-assigned devices can be delivered to guests without VMM
intervention when guest is running in non-root mode.
You can find the VT-d Posted-Interrtups Spec. in the following URL:
http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/vt-directed-io-spec.html
v9:
- Include the whole series:
[01/18]: irq bypasser manager
[02/18] - [06/18]: Common non-architecture part for VT-d PI and ARM side forwarded irq
[07/18] - [18/18]: VT-d PI part
v8:
refer to the changelog in each patch
v7:
* Define two weak irq bypass callbacks:
- kvm_arch_irq_bypass_start()
- kvm_arch_irq_bypass_stop()
* Remove the x86 dummy implementation of the above two functions.
* Print some useful information instead of WARN_ON() when the
irq bypass consumer unregistration fails.
* Fix an issue when calling pi_pre_block and pi_post_block.
v6:
* Rebase on 4.2.0-rc6
* Rebase on https://lkml.org/lkml/2015/8/6/526 and http://www.gossamer-threads.com/lists/linux/kernel/2235623
* Make the add_consumer and del_consumer callbacks static
* Remove pointless INIT_LIST_HEAD to 'vdev->ctx[vector].producer.node)'
* Use dev_info instead of WARN_ON() when irq_bypass_register_producer fails
* Remove optional dummy callbacks for irq producer
v4:
* For lowest-priority interrupt, only support single-CPU destination
interrupts at the current stage, more common lowest priority support
will be added later.
* Accoring to Marcelo's suggestion, when vCPU is blocked, we handle
the posted-interrupts in the HLT emulation path.
* Some small changes (coding style, typo, add some code comments)
v3:
* Adjust the Posted-interrupts Descriptor updating logic when vCPU is
preempted or blocked.
* KVM_DEV_VFIO_DEVICE_POSTING_IRQ --> KVM_DEV_VFIO_DEVICE_POST_IRQ
* __KVM_HAVE_ARCH_KVM_VFIO_POSTING --> __KVM_HAVE_ARCH_KVM_VFIO_POST
* Add KVM_DEV_VFIO_DEVICE_UNPOST_IRQ attribute for VFIO irq, which
can be used to change back to remapping mode.
* Fix typo
v2:
* Use VFIO framework to enable this feature, the VFIO part of this series is
base on Eric's patch "[PATCH v3 0/8] KVM-VFIO IRQ forward control"
* Rebase this patchset on git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git,
then revise some irq logic based on the new hierarchy irqdomain patches provided
by Jiang Liu <jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
*** BLURB HERE ***
Alex Williamson (1):
virt: IRQ bypass manager
Eric Auger (4):
KVM: arm/arm64: select IRQ_BYPASS_MANAGER
KVM: create kvm_irqfd.h
KVM: introduce kvm_arch functions for IRQ bypass
KVM: eventfd: add irq bypass consumer management
Feng Wu (13):
KVM: x86: select IRQ_BYPASS_MANAGER
KVM: Extend struct pi_desc for VT-d Posted-Interrupts
KVM: Add some helper functions for Posted-Interrupts
KVM: Define a new interface kvm_intr_is_single_vcpu()
KVM: Make struct kvm_irq_routing_table accessible
KVM: make kvm_set_msi_irq() public
vfio: Register/unregister irq_bypass_producer
KVM: x86: Update IRTE for posted-interrupts
KVM: Implement IRQ bypass consumer callbacks for x86
KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd'
KVM: Update Posted-Interrupts Descriptor when vCPU is preempted
KVM: Update Posted-Interrupts Descriptor when vCPU is blocked
iommu/vt-d: Add a command line parameter for VT-d posted-interrupts
Documentation/kernel-parameters.txt | 1 +
Documentation/virtual/kvm/locking.txt | 12 ++
MAINTAINERS | 7 +
arch/arm/kvm/Kconfig | 2 +
arch/arm/kvm/Makefile | 1 +
arch/arm64/kvm/Kconfig | 2 +
arch/arm64/kvm/Makefile | 1 +
arch/x86/include/asm/kvm_host.h | 24 +++
arch/x86/kvm/Kconfig | 3 +
arch/x86/kvm/Makefile | 3 +
arch/x86/kvm/irq_comm.c | 32 ++-
arch/x86/kvm/lapic.c | 59 ++++++
arch/x86/kvm/lapic.h | 2 +
arch/x86/kvm/trace.h | 33 ++++
arch/x86/kvm/vmx.c | 361 +++++++++++++++++++++++++++++++++-
arch/x86/kvm/x86.c | 108 +++++++++-
drivers/iommu/irq_remapping.c | 12 +-
drivers/vfio/pci/Kconfig | 1 +
drivers/vfio/pci/vfio_pci_intrs.c | 9 +
drivers/vfio/pci/vfio_pci_private.h | 2 +
include/linux/irqbypass.h | 90 +++++++++
include/linux/kvm_host.h | 29 +++
include/linux/kvm_irqfd.h | 71 +++++++
virt/kvm/Kconfig | 3 +
virt/kvm/eventfd.c | 142 +++++++------
virt/kvm/irqchip.c | 10 -
virt/kvm/kvm_main.c | 3 +
virt/lib/Kconfig | 2 +
virt/lib/Makefile | 1 +
virt/lib/irqbypass.c | 257 ++++++++++++++++++++++++
30 files changed, 1182 insertions(+), 101 deletions(-)
create mode 100644 include/linux/irqbypass.h
create mode 100644 include/linux/kvm_irqfd.h
create mode 100644 virt/lib/Kconfig
create mode 100644 virt/lib/Makefile
create mode 100644 virt/lib/irqbypass.c
--
2.1.0
^ permalink raw reply [flat|nested] 16+ messages in thread[parent not found: <1442586596-5920-1-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>]
* [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <1442586596-5920-1-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> @ 2015-09-18 14:29 ` Feng Wu [not found] ` <1442586596-5920-13-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Feng Wu @ 2015-09-18 14:29 UTC (permalink / raw) To: pbonzini-H+wXaHxf7aLQT0dZR+AlfA, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA, joro-zLv9SwRftAIdnm+yROfE0A, mtosatti-H+wXaHxf7aLQT0dZR+AlfA Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kvm-u79uwXL29TY76Z2rM5mHXA, eric.auger-QSEj5FYQhm4dnm+yROfE0A This patch adds the registration/unregistration of an irq_bypass_producer for MSI/MSIx on vfio pci devices. Signed-off-by: Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> --- v8: - Merge "[PATCH v7 08/17] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI devices" into this patch. v6: - Make the add_consumer and del_consumer callbacks static - Remove pointless INIT_LIST_HEAD to 'vdev->ctx[vector].producer.node)' - Use dev_info instead of WARN_ON() when irq_bypass_register_producer fails - Remove optional dummy callbacks for irq producer drivers/vfio/pci/Kconfig | 1 + drivers/vfio/pci/vfio_pci_intrs.c | 9 +++++++++ drivers/vfio/pci/vfio_pci_private.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig index 579d83b..02912f1 100644 --- a/drivers/vfio/pci/Kconfig +++ b/drivers/vfio/pci/Kconfig @@ -2,6 +2,7 @@ config VFIO_PCI tristate "VFIO support for PCI devices" depends on VFIO && PCI && EVENTFD select VFIO_VIRQFD + select IRQ_BYPASS_MANAGER help Support for the PCI VFIO bus driver. This is required to make use of PCI drivers using the VFIO framework. diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c index 1f577b4..c65299d 100644 --- a/drivers/vfio/pci/vfio_pci_intrs.c +++ b/drivers/vfio/pci/vfio_pci_intrs.c @@ -319,6 +319,7 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev, if (vdev->ctx[vector].trigger) { free_irq(irq, vdev->ctx[vector].trigger); + irq_bypass_unregister_producer(&vdev->ctx[vector].producer); kfree(vdev->ctx[vector].name); eventfd_ctx_put(vdev->ctx[vector].trigger); vdev->ctx[vector].trigger = NULL; @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev, return ret; } + vdev->ctx[vector].producer.token = trigger; + vdev->ctx[vector].producer.irq = irq; + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); + if (unlikely(ret)) + dev_info(&pdev->dev, + "irq bypass producer (token %p) registeration fails: %d\n", + vdev->ctx[vector].producer.token, ret); + vdev->ctx[vector].trigger = trigger; return 0; diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h index ae0e1b4..0e7394f 100644 --- a/drivers/vfio/pci/vfio_pci_private.h +++ b/drivers/vfio/pci/vfio_pci_private.h @@ -13,6 +13,7 @@ #include <linux/mutex.h> #include <linux/pci.h> +#include <linux/irqbypass.h> #ifndef VFIO_PCI_PRIVATE_H #define VFIO_PCI_PRIVATE_H @@ -29,6 +30,7 @@ struct vfio_pci_irq_ctx { struct virqfd *mask; char *name; bool masked; + struct irq_bypass_producer producer; }; struct vfio_pci_device { -- 2.1.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
[parent not found: <1442586596-5920-13-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <1442586596-5920-13-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> @ 2015-09-18 17:19 ` Alex Williamson 2015-09-21 8:56 ` Wu, Feng 2016-04-26 20:08 ` Alex Williamson 2 siblings, 0 replies; 16+ messages in thread From: Alex Williamson @ 2015-09-18 17:19 UTC (permalink / raw) To: Feng Wu Cc: kvm-u79uwXL29TY76Z2rM5mHXA, eric.auger-QSEj5FYQhm4dnm+yROfE0A, mtosatti-H+wXaHxf7aLQT0dZR+AlfA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, pbonzini-H+wXaHxf7aLQT0dZR+AlfA On Fri, 2015-09-18 at 22:29 +0800, Feng Wu wrote: > This patch adds the registration/unregistration of an > irq_bypass_producer for MSI/MSIx on vfio pci devices. > > Signed-off-by: Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> On nit, Paolo could you please fix the spelling of "registration" in the dev_info, otherwise: Acked-by: Alex Williamson <alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > --- > v8: > - Merge "[PATCH v7 08/17] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI devices" > into this patch. > > v6: > - Make the add_consumer and del_consumer callbacks static > - Remove pointless INIT_LIST_HEAD to 'vdev->ctx[vector].producer.node)' > - Use dev_info instead of WARN_ON() when irq_bypass_register_producer fails > - Remove optional dummy callbacks for irq producer > > drivers/vfio/pci/Kconfig | 1 + > drivers/vfio/pci/vfio_pci_intrs.c | 9 +++++++++ > drivers/vfio/pci/vfio_pci_private.h | 2 ++ > 3 files changed, 12 insertions(+) > > diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig > index 579d83b..02912f1 100644 > --- a/drivers/vfio/pci/Kconfig > +++ b/drivers/vfio/pci/Kconfig > @@ -2,6 +2,7 @@ config VFIO_PCI > tristate "VFIO support for PCI devices" > depends on VFIO && PCI && EVENTFD > select VFIO_VIRQFD > + select IRQ_BYPASS_MANAGER > help > Support for the PCI VFIO bus driver. This is required to make > use of PCI drivers using the VFIO framework. > diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c > index 1f577b4..c65299d 100644 > --- a/drivers/vfio/pci/vfio_pci_intrs.c > +++ b/drivers/vfio/pci/vfio_pci_intrs.c > @@ -319,6 +319,7 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev, > > if (vdev->ctx[vector].trigger) { > free_irq(irq, vdev->ctx[vector].trigger); > + irq_bypass_unregister_producer(&vdev->ctx[vector].producer); > kfree(vdev->ctx[vector].name); > eventfd_ctx_put(vdev->ctx[vector].trigger); > vdev->ctx[vector].trigger = NULL; > @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev, > return ret; > } > > + vdev->ctx[vector].producer.token = trigger; > + vdev->ctx[vector].producer.irq = irq; > + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); > + if (unlikely(ret)) > + dev_info(&pdev->dev, > + "irq bypass producer (token %p) registeration fails: %d\n", > + vdev->ctx[vector].producer.token, ret); > + > vdev->ctx[vector].trigger = trigger; > > return 0; > diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h > index ae0e1b4..0e7394f 100644 > --- a/drivers/vfio/pci/vfio_pci_private.h > +++ b/drivers/vfio/pci/vfio_pci_private.h > @@ -13,6 +13,7 @@ > > #include <linux/mutex.h> > #include <linux/pci.h> > +#include <linux/irqbypass.h> > > #ifndef VFIO_PCI_PRIVATE_H > #define VFIO_PCI_PRIVATE_H > @@ -29,6 +30,7 @@ struct vfio_pci_irq_ctx { > struct virqfd *mask; > char *name; > bool masked; > + struct irq_bypass_producer producer; > }; > > struct vfio_pci_device { ^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <1442586596-5920-13-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 2015-09-18 17:19 ` Alex Williamson @ 2015-09-21 8:56 ` Wu, Feng [not found] ` <E959C4978C3B6342920538CF579893F00272346C-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2016-04-26 20:08 ` Alex Williamson 2 siblings, 1 reply; 16+ messages in thread From: Wu, Feng @ 2015-09-21 8:56 UTC (permalink / raw) To: pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org Hi Paolo & Alex, I find that there is a build error in the following two cases: - KVM is configured as 'M' and VFIO as 'Y' The reason is the build of irqbypass manager is triggered in arch/x86/kvm/Makefile, and VFIO is built before KVM, hence it cannot find the symbols in irqbypass manager. - Disable KVM and enable VFIO in .config The reason is similar with the above one, the irqbypass manager is not built since KVM is not configured. I think the point is that we cannot trigger the build of irqbypass manager inside KVM or VFIO, we need trigger the build at a high level and it should be built before VFIO and KVM. Any ideas? Thanks, Feng > -----Original Message----- > From: Wu, Feng > Sent: Friday, September 18, 2015 10:30 PM > To: pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; > mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > Cc: eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; > iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; Wu, Feng > Subject: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer > > This patch adds the registration/unregistration of an > irq_bypass_producer for MSI/MSIx on vfio pci devices. > > Signed-off-by: Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > --- > v8: > - Merge "[PATCH v7 08/17] vfio: Select IRQ_BYPASS_MANAGER for vfio PCI > devices" > into this patch. > > v6: > - Make the add_consumer and del_consumer callbacks static > - Remove pointless INIT_LIST_HEAD to 'vdev->ctx[vector].producer.node)' > - Use dev_info instead of WARN_ON() when irq_bypass_register_producer fails > - Remove optional dummy callbacks for irq producer > > drivers/vfio/pci/Kconfig | 1 + > drivers/vfio/pci/vfio_pci_intrs.c | 9 +++++++++ > drivers/vfio/pci/vfio_pci_private.h | 2 ++ > 3 files changed, 12 insertions(+) > > diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig > index 579d83b..02912f1 100644 > --- a/drivers/vfio/pci/Kconfig > +++ b/drivers/vfio/pci/Kconfig > @@ -2,6 +2,7 @@ config VFIO_PCI > tristate "VFIO support for PCI devices" > depends on VFIO && PCI && EVENTFD > select VFIO_VIRQFD > + select IRQ_BYPASS_MANAGER > help > Support for the PCI VFIO bus driver. This is required to make > use of PCI drivers using the VFIO framework. > diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c > index 1f577b4..c65299d 100644 > --- a/drivers/vfio/pci/vfio_pci_intrs.c > +++ b/drivers/vfio/pci/vfio_pci_intrs.c > @@ -319,6 +319,7 @@ static int vfio_msi_set_vector_signal(struct > vfio_pci_device *vdev, > > if (vdev->ctx[vector].trigger) { > free_irq(irq, vdev->ctx[vector].trigger); > + irq_bypass_unregister_producer(&vdev->ctx[vector].producer); > kfree(vdev->ctx[vector].name); > eventfd_ctx_put(vdev->ctx[vector].trigger); > vdev->ctx[vector].trigger = NULL; > @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct > vfio_pci_device *vdev, > return ret; > } > > + vdev->ctx[vector].producer.token = trigger; > + vdev->ctx[vector].producer.irq = irq; > + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); > + if (unlikely(ret)) > + dev_info(&pdev->dev, > + "irq bypass producer (token %p) registeration fails: %d\n", > + vdev->ctx[vector].producer.token, ret); > + > vdev->ctx[vector].trigger = trigger; > > return 0; > diff --git a/drivers/vfio/pci/vfio_pci_private.h > b/drivers/vfio/pci/vfio_pci_private.h > index ae0e1b4..0e7394f 100644 > --- a/drivers/vfio/pci/vfio_pci_private.h > +++ b/drivers/vfio/pci/vfio_pci_private.h > @@ -13,6 +13,7 @@ > > #include <linux/mutex.h> > #include <linux/pci.h> > +#include <linux/irqbypass.h> > > #ifndef VFIO_PCI_PRIVATE_H > #define VFIO_PCI_PRIVATE_H > @@ -29,6 +30,7 @@ struct vfio_pci_irq_ctx { > struct virqfd *mask; > char *name; > bool masked; > + struct irq_bypass_producer producer; > }; > > struct vfio_pci_device { > -- > 2.1.0 ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <E959C4978C3B6342920538CF579893F00272346C-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <E959C4978C3B6342920538CF579893F00272346C-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2015-09-21 9:32 ` Paolo Bonzini [not found] ` <55FFCE9F.5090001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Paolo Bonzini @ 2015-09-21 9:32 UTC (permalink / raw) To: Wu, Feng, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org On 21/09/2015 10:56, Wu, Feng wrote: > Hi Paolo & Alex, > > I find that there is a build error in the following two cases: > - KVM is configured as 'M' and VFIO as 'Y' > The reason is the build of irqbypass manager is triggered in > arch/x86/kvm/Makefile, and VFIO is built before KVM, hence > it cannot find the symbols in irqbypass manager. > > - Disable KVM and enable VFIO in .config > The reason is similar with the above one, the irqbypass manager > is not built since KVM is not configured. > > I think the point is that we cannot trigger the build of irqbypass > manager inside KVM or VFIO, we need trigger the build at a high > level and it should be built before VFIO and KVM. Any ideas? We can add virt/Makefile and build virt/lib/ directly, not through arch/x86/kvm. Paolo ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <55FFCE9F.5090001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* RE: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <55FFCE9F.5090001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2015-09-21 11:35 ` Wu, Feng [not found] ` <E959C4978C3B6342920538CF579893F002723C42-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2015-09-21 12:53 ` Wu, Feng 1 sibling, 1 reply; 16+ messages in thread From: Wu, Feng @ 2015-09-21 11:35 UTC (permalink / raw) To: Paolo Bonzini, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org > -----Original Message----- > From: Paolo Bonzini [mailto:pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org] > Sent: Monday, September 21, 2015 5:32 PM > To: Wu, Feng; alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; > mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > Cc: eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; > iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer > > > > On 21/09/2015 10:56, Wu, Feng wrote: > > Hi Paolo & Alex, > > > > I find that there is a build error in the following two cases: > > - KVM is configured as 'M' and VFIO as 'Y' > > The reason is the build of irqbypass manager is triggered in > > arch/x86/kvm/Makefile, and VFIO is built before KVM, hence > > it cannot find the symbols in irqbypass manager. > > > > - Disable KVM and enable VFIO in .config > > The reason is similar with the above one, the irqbypass manager > > is not built since KVM is not configured. > > > > I think the point is that we cannot trigger the build of irqbypass > > manager inside KVM or VFIO, we need trigger the build at a high > > level and it should be built before VFIO and KVM. Any ideas? > > We can add virt/Makefile and build virt/lib/ directly, not through > arch/x86/kvm. Yes, that can solve the build error. Should I send a new version? Thanks, Feng > > Paolo ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <E959C4978C3B6342920538CF579893F002723C42-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <E959C4978C3B6342920538CF579893F002723C42-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2015-09-21 12:06 ` Paolo Bonzini [not found] ` <55FFF2CC.6040107-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Paolo Bonzini @ 2015-09-21 12:06 UTC (permalink / raw) To: Wu, Feng, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org On 21/09/2015 13:35, Wu, Feng wrote: >>> > > I think the point is that we cannot trigger the build of irqbypass >>> > > manager inside KVM or VFIO, we need trigger the build at a high >>> > > level and it should be built before VFIO and KVM. Any ideas? >> > >> > We can add virt/Makefile and build virt/lib/ directly, not through >> > arch/x86/kvm. > Yes, that can solve the build error. Should I send a new version? You can send a separate patch on top of this v9. Paolo ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <55FFF2CC.6040107-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* RE: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <55FFF2CC.6040107-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2015-09-21 12:08 ` Wu, Feng 0 siblings, 0 replies; 16+ messages in thread From: Wu, Feng @ 2015-09-21 12:08 UTC (permalink / raw) To: Paolo Bonzini, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org > -----Original Message----- > From: Paolo Bonzini [mailto:pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org] > Sent: Monday, September 21, 2015 8:07 PM > To: Wu, Feng; alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; > mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > Cc: eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; > iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer > > > > On 21/09/2015 13:35, Wu, Feng wrote: > >>> > > I think the point is that we cannot trigger the build of irqbypass > >>> > > manager inside KVM or VFIO, we need trigger the build at a high > >>> > > level and it should be built before VFIO and KVM. Any ideas? > >> > > >> > We can add virt/Makefile and build virt/lib/ directly, not through > >> > arch/x86/kvm. > > Yes, that can solve the build error. Should I send a new version? > > You can send a separate patch on top of this v9. Sure, will do this soon! Thanks, Feng > > Paolo ^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <55FFCE9F.5090001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2015-09-21 11:35 ` Wu, Feng @ 2015-09-21 12:53 ` Wu, Feng 2015-09-21 13:02 ` Paolo Bonzini 1 sibling, 1 reply; 16+ messages in thread From: Wu, Feng @ 2015-09-21 12:53 UTC (permalink / raw) To: Paolo Bonzini, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org > -----Original Message----- > From: Paolo Bonzini [mailto:pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org] > Sent: Monday, September 21, 2015 5:32 PM > To: Wu, Feng; alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; > mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > Cc: eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; > iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer > > > > On 21/09/2015 10:56, Wu, Feng wrote: > > Hi Paolo & Alex, > > > > I find that there is a build error in the following two cases: > > - KVM is configured as 'M' and VFIO as 'Y' > > The reason is the build of irqbypass manager is triggered in > > arch/x86/kvm/Makefile, and VFIO is built before KVM, hence > > it cannot find the symbols in irqbypass manager. > > > > - Disable KVM and enable VFIO in .config > > The reason is similar with the above one, the irqbypass manager > > is not built since KVM is not configured. > > > > I think the point is that we cannot trigger the build of irqbypass > > manager inside KVM or VFIO, we need trigger the build at a high > > level and it should be built before VFIO and KVM. Any ideas? > > We can add virt/Makefile and build virt/lib/ directly, not through > arch/x86/kvm. Thinking about this more, does that mean we need to add the virt directory in the top Makefile in Linux tree? Thanks, Feng > > Paolo ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer 2015-09-21 12:53 ` Wu, Feng @ 2015-09-21 13:02 ` Paolo Bonzini [not found] ` <55FFFFEE.6090800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Paolo Bonzini @ 2015-09-21 13:02 UTC (permalink / raw) To: Wu, Feng, alex.williamson@redhat.com, joro@8bytes.org, mtosatti@redhat.com Cc: eric.auger@linaro.org, kvm@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org On 21/09/2015 14:53, Wu, Feng wrote: >>> > > I think the point is that we cannot trigger the build of irqbypass >>> > > manager inside KVM or VFIO, we need trigger the build at a high >>> > > level and it should be built before VFIO and KVM. Any ideas? >> > >> > We can add virt/Makefile and build virt/lib/ directly, not through >> > arch/x86/kvm. > Thinking about this more, does that mean we need to add the virt directory > in the top Makefile in Linux tree? Yes, it does. Paolo ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <55FFFFEE.6090800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <55FFFFEE.6090800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2015-09-21 19:46 ` Eric Auger 0 siblings, 0 replies; 16+ messages in thread From: Eric Auger @ 2015-09-21 19:46 UTC (permalink / raw) To: Paolo Bonzini, Wu, Feng, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Hi, On 09/21/2015 03:02 PM, Paolo Bonzini wrote: > > > On 21/09/2015 14:53, Wu, Feng wrote: >>>>>> I think the point is that we cannot trigger the build of irqbypass >>>>>> manager inside KVM or VFIO, we need trigger the build at a high >>>>>> level and it should be built before VFIO and KVM. Any ideas? >>>> >>>> We can add virt/Makefile and build virt/lib/ directly, not through >>>> arch/x86/kvm. >> Thinking about this more, does that mean we need to add the virt directory >> in the top Makefile in Linux tree? > > Yes, it does. So I understand this will replace patches 2 & 3 then and will fix the arm64 issue then. Thanks Eric > > Paolo > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <1442586596-5920-13-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 2015-09-18 17:19 ` Alex Williamson 2015-09-21 8:56 ` Wu, Feng @ 2016-04-26 20:08 ` Alex Williamson [not found] ` <20160426140816.67b8b37c-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org> 2 siblings, 1 reply; 16+ messages in thread From: Alex Williamson @ 2016-04-26 20:08 UTC (permalink / raw) To: Feng Wu Cc: kvm-u79uwXL29TY76Z2rM5mHXA, eric.auger-QSEj5FYQhm4dnm+yROfE0A, mtosatti-H+wXaHxf7aLQT0dZR+AlfA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, pbonzini-H+wXaHxf7aLQT0dZR+AlfA On Fri, 18 Sep 2015 22:29:50 +0800 Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote: @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev, > return ret; > } > > + vdev->ctx[vector].producer.token = trigger; > + vdev->ctx[vector].producer.irq = irq; > + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); > + if (unlikely(ret)) > + dev_info(&pdev->dev, > + "irq bypass producer (token %p) registeration fails: %d\n", > + vdev->ctx[vector].producer.token, ret); > + > vdev->ctx[vector].trigger = trigger; > > return 0; Digging back into the IRQ producer/consumer thing, I'm not sure how we should be handling a failure here, but it turns out that what we have is pretty sub-optimal. Any sort of testing on AMD hits this dev_info because kvm_arch_irq_bypass_add_producer() returns -EINVAL without kvm_x86_ops->update_pi_irte which is only implemented for vmx. Clearly we don't want to spew confusing error messages for a feature that does not exist. The easiest option is to simply make this error silent, but should registering a producer/consumer really fail due to a mismatch on the other end or should the __connect sequence fail silently, which both ends would know about (if they care) due to the add/del handshake between them? Perhaps for now we simply need a stable suitable fix to silence the dev_info above, but longer term, registration shouldn't fail for mismatches like this. Thoughts? Thanks, Alex ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <20160426140816.67b8b37c-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org>]
* RE: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <20160426140816.67b8b37c-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org> @ 2016-04-27 1:32 ` Wu, Feng [not found] ` <E959C4978C3B6342920538CF579893F00C3D3D29-0J0gbvR4kTggGBtAFL8yw7fspsVTdybXVpNB7YpNyf8@public.gmane.org> 2016-04-28 15:35 ` Eric Auger 1 sibling, 1 reply; 16+ messages in thread From: Wu, Feng @ 2016-04-27 1:32 UTC (permalink / raw) To: Alex Williamson Cc: kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > -----Original Message----- > From: Alex Williamson [mailto:alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org] > Sent: Wednesday, April 27, 2016 4:08 AM > To: Wu, Feng <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > Cc: pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; > eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; iommu-cunTk1MwBs/ROKNJybVBZg@public.gmane.org > foundation.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer > > On Fri, 18 Sep 2015 22:29:50 +0800 > Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote: > > @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct > vfio_pci_device *vdev, > > return ret; > > } > > > > + vdev->ctx[vector].producer.token = trigger; > > + vdev->ctx[vector].producer.irq = irq; > > + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); > > + if (unlikely(ret)) > > + dev_info(&pdev->dev, > > + "irq bypass producer (token %p) registeration fails: %d\n", > > + vdev->ctx[vector].producer.token, ret); > > + > > vdev->ctx[vector].trigger = trigger; > > > > return 0; > > Digging back into the IRQ producer/consumer thing, I'm not sure how we > should be handling a failure here, but it turns out that what we have > is pretty sub-optimal. Any sort of testing on AMD hits this dev_info > because kvm_arch_irq_bypass_add_producer() returns -EINVAL without > kvm_x86_ops->update_pi_irte which is only implemented for vmx. Clearly > we don't want to spew confusing error messages for a feature that does > not exist. > > The easiest option is to simply make this error silent, but should > registering a producer/consumer really fail due to a mismatch on the > other end or should the __connect sequence fail silently, which both > ends would know about (if they care) due to the add/del handshake > between them? Perhaps for now we simply need a stable suitable fix to > silence the dev_info above, but longer term, registration shouldn't > fail for mismatches like this. Thoughts? Thanks, Can we just return 0 when kvm_x86_ops->update_pi_irte is NULL in kvm_arch_irq_bypass_add_producer? Thanks, Feng > > Alex ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <E959C4978C3B6342920538CF579893F00C3D3D29-0J0gbvR4kTggGBtAFL8yw7fspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <E959C4978C3B6342920538CF579893F00C3D3D29-0J0gbvR4kTggGBtAFL8yw7fspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2016-04-28 16:40 ` Alex Williamson 0 siblings, 0 replies; 16+ messages in thread From: Alex Williamson @ 2016-04-28 16:40 UTC (permalink / raw) To: Wu, Feng Cc: kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org On Wed, 27 Apr 2016 01:32:32 +0000 "Wu, Feng" <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote: > > -----Original Message----- > > From: Alex Williamson [mailto:alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org] > > Sent: Wednesday, April 27, 2016 4:08 AM > > To: Wu, Feng <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> > > Cc: pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org; > > eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; iommu-cunTk1MwBs/ROKNJybVBZg@public.gmane.org > > foundation.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > > Subject: Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer > > > > On Fri, 18 Sep 2015 22:29:50 +0800 > > Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote: > > > > @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct > > vfio_pci_device *vdev, > > > return ret; > > > } > > > > > > + vdev->ctx[vector].producer.token = trigger; > > > + vdev->ctx[vector].producer.irq = irq; > > > + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); > > > + if (unlikely(ret)) > > > + dev_info(&pdev->dev, > > > + "irq bypass producer (token %p) registeration fails: %d\n", > > > + vdev->ctx[vector].producer.token, ret); > > > + > > > vdev->ctx[vector].trigger = trigger; > > > > > > return 0; > > > > Digging back into the IRQ producer/consumer thing, I'm not sure how we > > should be handling a failure here, but it turns out that what we have > > is pretty sub-optimal. Any sort of testing on AMD hits this dev_info > > because kvm_arch_irq_bypass_add_producer() returns -EINVAL without > > kvm_x86_ops->update_pi_irte which is only implemented for vmx. Clearly > > we don't want to spew confusing error messages for a feature that does > > not exist. > > > > The easiest option is to simply make this error silent, but should > > registering a producer/consumer really fail due to a mismatch on the > > other end or should the __connect sequence fail silently, which both > > ends would know about (if they care) due to the add/del handshake > > between them? Perhaps for now we simply need a stable suitable fix to > > silence the dev_info above, but longer term, registration shouldn't > > fail for mismatches like this. Thoughts? Thanks, > > Can we just return 0 when kvm_x86_ops->update_pi_irte is NULL in > kvm_arch_irq_bypass_add_producer? Yeah, that may be the best way to go, only return error for actual failures, not for simple lack of a bypass mechanism. This is consistent with what update_pi_irte does when running on hardware or configurations without PI. Thanks, Alex ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer [not found] ` <20160426140816.67b8b37c-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org> 2016-04-27 1:32 ` Wu, Feng @ 2016-04-28 15:35 ` Eric Auger 1 sibling, 0 replies; 16+ messages in thread From: Eric Auger @ 2016-04-28 15:35 UTC (permalink / raw) To: Alex Williamson, Feng Wu Cc: kvm-u79uwXL29TY76Z2rM5mHXA, mtosatti-H+wXaHxf7aLQT0dZR+AlfA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, pbonzini-H+wXaHxf7aLQT0dZR+AlfA Hi Alex, On 04/26/2016 10:08 PM, Alex Williamson wrote: > On Fri, 18 Sep 2015 22:29:50 +0800 > Feng Wu <feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote: > > @@ -360,6 +361,14 @@ static int vfio_msi_set_vector_signal(struct > vfio_pci_device *vdev, >> return ret; >> } >> >> + vdev->ctx[vector].producer.token = trigger; >> + vdev->ctx[vector].producer.irq = irq; >> + ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); >> + if (unlikely(ret)) >> + dev_info(&pdev->dev, >> + "irq bypass producer (token %p) registeration fails: %d\n", >> + vdev->ctx[vector].producer.token, ret); >> + >> vdev->ctx[vector].trigger = trigger; >> >> return 0; > > Digging back into the IRQ producer/consumer thing, I'm not sure how we > should be handling a failure here, but it turns out that what we have > is pretty sub-optimal. Any sort of testing on AMD hits this dev_info > because kvm_arch_irq_bypass_add_producer() returns -EINVAL without > kvm_x86_ops->update_pi_irte which is only implemented for vmx. Clearly > we don't want to spew confusing error messages for a feature that does > not exist. > > The easiest option is to simply make this error silent, but should > registering a producer/consumer really fail due to a mismatch on the > other end or should the __connect sequence fail silently, which both > ends would know about (if they care) due to the add/del handshake > between them? Perhaps for now we simply need a stable suitable fix to > silence the dev_info above, but longer term, registration shouldn't > fail for mismatches like this. Thoughts? Thanks, Regarding the ARM IRQ forwarding use case, I think it is OK to fail silently. We would fall back to the irqfd standard mechanism. Anyway this series still is waiting for ARM new-vgic dependency to be resolved, as discussed with Christoffer and Marc. Best Regards Eric > > Alex > ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2016-04-28 16:40 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-22 9:01 [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer Wu, Feng
[not found] ` <E959C4978C3B6342920538CF579893F002726FF2-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-09-23 1:35 ` Eric Auger
-- strict thread matches above, loose matches on Subject: below --
2015-09-18 14:29 [PATCH v9 00/18] Add VT-d Posted-Interrupts support - including prerequisite series Feng Wu
[not found] ` <1442586596-5920-1-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-09-18 14:29 ` [PATCH v9 12/18] vfio: Register/unregister irq_bypass_producer Feng Wu
[not found] ` <1442586596-5920-13-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-09-18 17:19 ` Alex Williamson
2015-09-21 8:56 ` Wu, Feng
[not found] ` <E959C4978C3B6342920538CF579893F00272346C-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-09-21 9:32 ` Paolo Bonzini
[not found] ` <55FFCE9F.5090001-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-09-21 11:35 ` Wu, Feng
[not found] ` <E959C4978C3B6342920538CF579893F002723C42-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-09-21 12:06 ` Paolo Bonzini
[not found] ` <55FFF2CC.6040107-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-09-21 12:08 ` Wu, Feng
2015-09-21 12:53 ` Wu, Feng
2015-09-21 13:02 ` Paolo Bonzini
[not found] ` <55FFFFEE.6090800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-09-21 19:46 ` Eric Auger
2016-04-26 20:08 ` Alex Williamson
[not found] ` <20160426140816.67b8b37c-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org>
2016-04-27 1:32 ` Wu, Feng
[not found] ` <E959C4978C3B6342920538CF579893F00C3D3D29-0J0gbvR4kTggGBtAFL8yw7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-28 16:40 ` Alex Williamson
2016-04-28 15:35 ` Eric Auger
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).