* [RFC PATCH v1 0/2] Define some VFIO interfaces for VT-d Posted-Interrupts @ 2014-11-20 9:05 Feng Wu 2014-11-20 9:05 ` [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO Feng Wu 2014-11-20 9:05 ` [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq Feng Wu 0 siblings, 2 replies; 8+ messages in thread From: Feng Wu @ 2014-11-20 9:05 UTC (permalink / raw) To: alex.williamson, pbonzini; +Cc: kvm, Feng Wu 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 This patch set does the following things: - Define a new VFIO group KVM_DEV_VFIO_INTERRUPT and it's attributes KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ. Qemu can use this interface to configure VT-d PI when guest updates the interrupt configuration (MSI/MSI-X configuration). - Define a new VFIO API: vfio_msi_get_irq(), which can be used by KVM to get the host irq of the assigned devices. Then KVM can update the associated IRTE for VT-d PI. Feng Wu (2): vfio: Add new interrupt group for VFIO vfio: Add VFIO API vfio_msi_get_irq Documentation/virtual/kvm/devices/vfio.txt | 8 ++++++++ drivers/vfio/pci/vfio_pci.c | 10 ++++++++++ include/linux/vfio.h | 2 ++ include/uapi/linux/kvm.h | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 0 deletions(-) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO 2014-11-20 9:05 [RFC PATCH v1 0/2] Define some VFIO interfaces for VT-d Posted-Interrupts Feng Wu @ 2014-11-20 9:05 ` Feng Wu 2014-11-20 15:53 ` Alex Williamson 2014-11-20 9:05 ` [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq Feng Wu 1 sibling, 1 reply; 8+ messages in thread From: Feng Wu @ 2014-11-20 9:05 UTC (permalink / raw) To: alex.williamson, pbonzini; +Cc: kvm, Feng Wu Add new group KVM_DEV_VFIO_INTERRUPT and command KVM_DEV_VFIO_DEVIE_POSTING_IRQ related to it. This is used for VT-d Posted-Interrupts setup. Signed-off-by: Feng Wu <feng.wu@intel.com> --- Documentation/virtual/kvm/devices/vfio.txt | 8 ++++++++ include/uapi/linux/kvm.h | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 0 deletions(-) diff --git a/Documentation/virtual/kvm/devices/vfio.txt b/Documentation/virtual/kvm/devices/vfio.txt index ef51740..bd99176 100644 --- a/Documentation/virtual/kvm/devices/vfio.txt +++ b/Documentation/virtual/kvm/devices/vfio.txt @@ -13,6 +13,7 @@ VFIO-group is held by KVM. Groups: KVM_DEV_VFIO_GROUP + KVM_DEV_VFIO_INTERRUPT KVM_DEV_VFIO_GROUP attributes: KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device tracking @@ -20,3 +21,10 @@ KVM_DEV_VFIO_GROUP attributes: For each, kvm_device_attr.addr points to an int32_t file descriptor for the VFIO group. + +KVM_DEV_VFIO_INTERRUPT attributes: + KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ: Set up the interrupt configuration for +VT-d Posted-Interrrupts + +For each, kvm_device_attr.addr points to struct kvm_posted_intr, which +include the needed information for VT-d Posted-Interrupts setup. diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 6076882..5544fcc 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -943,9 +943,23 @@ struct kvm_device_attr { __u64 addr; /* userspace address of attr data */ }; +struct virq_info { + __u32 index; /* index of the msi/msix entry */ + int virq; /* virq of the interrupt */ +}; + +struct kvm_posted_intr { + __u32 fd; /* file descriptor of the VFIO device */ + __u32 count; + bool msix; + struct virq_info virq_info[0]; +}; + #define KVM_DEV_VFIO_GROUP 1 #define KVM_DEV_VFIO_GROUP_ADD 1 #define KVM_DEV_VFIO_GROUP_DEL 2 +#define KVM_DEV_VFIO_INTERRUPT 2 +#define KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ 1 enum kvm_device_type { KVM_DEV_TYPE_FSL_MPIC_20 = 1, -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO 2014-11-20 9:05 ` [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO Feng Wu @ 2014-11-20 15:53 ` Alex Williamson 2014-11-20 16:03 ` Eric Auger [not found] ` <E959C4978C3B6342920538CF579893F0022A8711@SHSMSX104.ccr.corp.intel.com> 0 siblings, 2 replies; 8+ messages in thread From: Alex Williamson @ 2014-11-20 15:53 UTC (permalink / raw) To: Feng Wu; +Cc: pbonzini, kvm, eric.auger On Thu, 2014-11-20 at 17:05 +0800, Feng Wu wrote: > Add new group KVM_DEV_VFIO_INTERRUPT and command > KVM_DEV_VFIO_DEVIE_POSTING_IRQ related to it. > > This is used for VT-d Posted-Interrupts setup. Eric proposed an interface for ARM forwarded interrupts[1] using group KVM_DEV_VFIO_DEVICE with attributes KVM_DEV_VFIO_DEVICE_ASSIGN_IRQ and KVM_DEV_VFIO_DEVICE_DEASSIGN_IRQ. Why are we proposing yet another group and attributes here? Why can't we re-use the ones Eric proposes? [1] https://lkml.org/lkml/2014/8/25/258 > Signed-off-by: Feng Wu <feng.wu@intel.com> > --- > Documentation/virtual/kvm/devices/vfio.txt | 8 ++++++++ > include/uapi/linux/kvm.h | 14 ++++++++++++++ > 2 files changed, 22 insertions(+), 0 deletions(-) > > diff --git a/Documentation/virtual/kvm/devices/vfio.txt b/Documentation/virtual/kvm/devices/vfio.txt > index ef51740..bd99176 100644 > --- a/Documentation/virtual/kvm/devices/vfio.txt > +++ b/Documentation/virtual/kvm/devices/vfio.txt > @@ -13,6 +13,7 @@ VFIO-group is held by KVM. > > Groups: > KVM_DEV_VFIO_GROUP > + KVM_DEV_VFIO_INTERRUPT > > KVM_DEV_VFIO_GROUP attributes: > KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device tracking > @@ -20,3 +21,10 @@ KVM_DEV_VFIO_GROUP attributes: > > For each, kvm_device_attr.addr points to an int32_t file descriptor > for the VFIO group. > + > +KVM_DEV_VFIO_INTERRUPT attributes: > + KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ: Set up the interrupt configuration for > +VT-d Posted-Interrrupts > + > +For each, kvm_device_attr.addr points to struct kvm_posted_intr, which > +include the needed information for VT-d Posted-Interrupts setup. > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 6076882..5544fcc 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -943,9 +943,23 @@ struct kvm_device_attr { > __u64 addr; /* userspace address of attr data */ > }; > > +struct virq_info { > + __u32 index; /* index of the msi/msix entry */ > + int virq; /* virq of the interrupt */ > +}; > + > +struct kvm_posted_intr { > + __u32 fd; /* file descriptor of the VFIO device */ > + __u32 count; > + bool msix; Note that MSI-X (as opposed to MSI) is a PCI concept. Being a VFIO interface this should operate at VFIO IRQ index and sub-index. > + struct virq_info virq_info[0]; > +}; > + > #define KVM_DEV_VFIO_GROUP 1 > #define KVM_DEV_VFIO_GROUP_ADD 1 > #define KVM_DEV_VFIO_GROUP_DEL 2 > +#define KVM_DEV_VFIO_INTERRUPT 2 > +#define KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ 1 > > enum kvm_device_type { > KVM_DEV_TYPE_FSL_MPIC_20 = 1, ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO 2014-11-20 15:53 ` Alex Williamson @ 2014-11-20 16:03 ` Eric Auger [not found] ` <E959C4978C3B6342920538CF579893F0022A8711@SHSMSX104.ccr.corp.intel.com> 1 sibling, 0 replies; 8+ messages in thread From: Eric Auger @ 2014-11-20 16:03 UTC (permalink / raw) To: Alex Williamson, Feng Wu; +Cc: pbonzini, kvm On 11/20/2014 04:53 PM, Alex Williamson wrote: > On Thu, 2014-11-20 at 17:05 +0800, Feng Wu wrote: >> Add new group KVM_DEV_VFIO_INTERRUPT and command >> KVM_DEV_VFIO_DEVIE_POSTING_IRQ related to it. >> >> This is used for VT-d Posted-Interrupts setup. > > Eric proposed an interface for ARM forwarded interrupts[1] using group > KVM_DEV_VFIO_DEVICE with attributes KVM_DEV_VFIO_DEVICE_ASSIGN_IRQ and > KVM_DEV_VFIO_DEVICE_DEASSIGN_IRQ. Why are we proposing yet another > group and attributes here? Why can't we re-use the ones Eric proposes? Hi Alex, Feng I share your point of view about the KVM_DEV_VFIO_DEVICE group. For the attribute (renamed KVM_DEV_VFIO_DEVICE_FORWARD_IRQ in RFC v2) the issue is I specify the kvm_device_attr.addr points to a kvm_arch_forwarded_irq struct. Feng needs another struct - kvm_posted_intr -. An alternative is to merge both structs if it makes sense. Best Regards Eric > > [1] https://lkml.org/lkml/2014/8/25/258 > >> Signed-off-by: Feng Wu <feng.wu@intel.com> >> --- >> Documentation/virtual/kvm/devices/vfio.txt | 8 ++++++++ >> include/uapi/linux/kvm.h | 14 ++++++++++++++ >> 2 files changed, 22 insertions(+), 0 deletions(-) >> >> diff --git a/Documentation/virtual/kvm/devices/vfio.txt b/Documentation/virtual/kvm/devices/vfio.txt >> index ef51740..bd99176 100644 >> --- a/Documentation/virtual/kvm/devices/vfio.txt >> +++ b/Documentation/virtual/kvm/devices/vfio.txt >> @@ -13,6 +13,7 @@ VFIO-group is held by KVM. >> >> Groups: >> KVM_DEV_VFIO_GROUP >> + KVM_DEV_VFIO_INTERRUPT >> >> KVM_DEV_VFIO_GROUP attributes: >> KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device tracking >> @@ -20,3 +21,10 @@ KVM_DEV_VFIO_GROUP attributes: >> >> For each, kvm_device_attr.addr points to an int32_t file descriptor >> for the VFIO group. >> + >> +KVM_DEV_VFIO_INTERRUPT attributes: >> + KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ: Set up the interrupt configuration for >> +VT-d Posted-Interrrupts >> + >> +For each, kvm_device_attr.addr points to struct kvm_posted_intr, which >> +include the needed information for VT-d Posted-Interrupts setup. >> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h >> index 6076882..5544fcc 100644 >> --- a/include/uapi/linux/kvm.h >> +++ b/include/uapi/linux/kvm.h >> @@ -943,9 +943,23 @@ struct kvm_device_attr { >> __u64 addr; /* userspace address of attr data */ >> }; >> >> +struct virq_info { >> + __u32 index; /* index of the msi/msix entry */ >> + int virq; /* virq of the interrupt */ >> +}; >> + >> +struct kvm_posted_intr { >> + __u32 fd; /* file descriptor of the VFIO device */ >> + __u32 count; >> + bool msix; > > Note that MSI-X (as opposed to MSI) is a PCI concept. Being a VFIO > interface this should operate at VFIO IRQ index and sub-index. > >> + struct virq_info virq_info[0]; >> +}; >> + >> #define KVM_DEV_VFIO_GROUP 1 >> #define KVM_DEV_VFIO_GROUP_ADD 1 >> #define KVM_DEV_VFIO_GROUP_DEL 2 >> +#define KVM_DEV_VFIO_INTERRUPT 2 >> +#define KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ 1 >> >> enum kvm_device_type { >> KVM_DEV_TYPE_FSL_MPIC_20 = 1, > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <E959C4978C3B6342920538CF579893F0022A8711@SHSMSX104.ccr.corp.intel.com>]
* Re: [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO [not found] ` <E959C4978C3B6342920538CF579893F0022A8711@SHSMSX104.ccr.corp.intel.com> @ 2014-11-21 19:35 ` Alex Williamson 0 siblings, 0 replies; 8+ messages in thread From: Alex Williamson @ 2014-11-21 19:35 UTC (permalink / raw) To: Wu, Feng; +Cc: pbonzini@redhat.com, kvm@vger.kernel.org, eric.auger On Fri, 2014-11-21 at 06:06 +0000, Wu, Feng wrote: > > > -----Original Message----- > > From: Alex Williamson [mailto:alex.williamson@redhat.com] > > Sent: Thursday, November 20, 2014 11:54 PM > > To: Wu, Feng > > Cc: pbonzini@redhat.com; kvm@vger.kernel.org; eric.auger > > Subject: Re: [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO > > > > On Thu, 2014-11-20 at 17:05 +0800, Feng Wu wrote: > > > Add new group KVM_DEV_VFIO_INTERRUPT and command > > > KVM_DEV_VFIO_DEVIE_POSTING_IRQ related to it. > > > > > > This is used for VT-d Posted-Interrupts setup. > > > > Eric proposed an interface for ARM forwarded interrupts[1] using group > > KVM_DEV_VFIO_DEVICE with attributes > > KVM_DEV_VFIO_DEVICE_ASSIGN_IRQ and > > KVM_DEV_VFIO_DEVICE_DEASSIGN_IRQ. Why are we proposing yet another > > group and attributes here? Why can't we re-use the ones Eric proposes? > > > > I totally agree that I can reuse Eric's proposals. However, as Eric mentioned in > his reply, I am using another data structure. So how about adding my own > attribute, say, KVM_DEV_VFIO_DEVICE_POSTING_IRQ in group KVM_DEV_VFIO_DEVICE. Right, Eric's latest proposal (sorry I picked the v1 links by mistake in my previous reply) includes: KVM_DEV_VFIO_DEVICE attributes: KVM_DEV_VFIO_DEVICE_FORWARD_IRQ KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ So I think we'd want to add something similar for posted interrupts, some sort of "start" and "stop" attribute. At the QEMU level we'll want to abstract both of these as opportunistic IRQ accelerators, but at the KVM-VFIO level we probably need to make them distinct using a separate set of attributes. Who knows, maybe one day ARM will support posted interrupts and Intel will support forwarding... I expect the calls from the KVM-VFIO device into VFIO at the kernel level to be largely the same between the different attributes though. Thanks, Alex > > [1] https://lkml.org/lkml/2014/8/25/258 > > > > > Signed-off-by: Feng Wu <feng.wu@intel.com> > > > --- > > > Documentation/virtual/kvm/devices/vfio.txt | 8 ++++++++ > > > include/uapi/linux/kvm.h | 14 ++++++++++++++ > > > 2 files changed, 22 insertions(+), 0 deletions(-) > > > > > > diff --git a/Documentation/virtual/kvm/devices/vfio.txt > > b/Documentation/virtual/kvm/devices/vfio.txt > > > index ef51740..bd99176 100644 > > > --- a/Documentation/virtual/kvm/devices/vfio.txt > > > +++ b/Documentation/virtual/kvm/devices/vfio.txt > > > @@ -13,6 +13,7 @@ VFIO-group is held by KVM. > > > > > > Groups: > > > KVM_DEV_VFIO_GROUP > > > + KVM_DEV_VFIO_INTERRUPT > > > > > > KVM_DEV_VFIO_GROUP attributes: > > > KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device > > tracking > > > @@ -20,3 +21,10 @@ KVM_DEV_VFIO_GROUP attributes: > > > > > > For each, kvm_device_attr.addr points to an int32_t file descriptor > > > for the VFIO group. > > > + > > > +KVM_DEV_VFIO_INTERRUPT attributes: > > > + KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ: Set up the interrupt > > configuration for > > > +VT-d Posted-Interrrupts > > > + > > > +For each, kvm_device_attr.addr points to struct kvm_posted_intr, which > > > +include the needed information for VT-d Posted-Interrupts setup. > > > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > > > index 6076882..5544fcc 100644 > > > --- a/include/uapi/linux/kvm.h > > > +++ b/include/uapi/linux/kvm.h > > > @@ -943,9 +943,23 @@ struct kvm_device_attr { > > > __u64 addr; /* userspace address of attr data */ > > > }; > > > > > > +struct virq_info { > > > + __u32 index; /* index of the msi/msix entry */ > > > + int virq; /* virq of the interrupt */ > > > +}; > > > + > > > +struct kvm_posted_intr { > > > + __u32 fd; /* file descriptor of the VFIO device */ > > > + __u32 count; > > > + bool msix; > > > > Note that MSI-X (as opposed to MSI) is a PCI concept. Being a VFIO > > interface this should operate at VFIO IRQ index and sub-index. > > Yes, I will use VFIO stuff instead. > > Thanks, > Feng > > > > > > + struct virq_info virq_info[0]; > > > +}; > > > + > > > #define KVM_DEV_VFIO_GROUP 1 > > > #define KVM_DEV_VFIO_GROUP_ADD 1 > > > #define KVM_DEV_VFIO_GROUP_DEL 2 > > > +#define KVM_DEV_VFIO_INTERRUPT 2 > > > +#define KVM_DEV_VFIO_INTERRUPT_POSTING_IRQ 1 > > > > > > enum kvm_device_type { > > > KVM_DEV_TYPE_FSL_MPIC_20 = 1, > > > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq 2014-11-20 9:05 [RFC PATCH v1 0/2] Define some VFIO interfaces for VT-d Posted-Interrupts Feng Wu 2014-11-20 9:05 ` [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO Feng Wu @ 2014-11-20 9:05 ` Feng Wu 2014-11-20 16:05 ` Alex Williamson 1 sibling, 1 reply; 8+ messages in thread From: Feng Wu @ 2014-11-20 9:05 UTC (permalink / raw) To: alex.williamson, pbonzini; +Cc: kvm, Feng Wu This API returns the host irq for the MSI/MSI-X interrrupts. Signed-off-by: Feng Wu <feng.wu@intel.com> --- drivers/vfio/pci/vfio_pci.c | 10 ++++++++++ include/linux/vfio.h | 2 ++ 2 files changed, 12 insertions(+), 0 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c index 9558da3..4fb9828 100644 --- a/drivers/vfio/pci/vfio_pci.c +++ b/drivers/vfio/pci/vfio_pci.c @@ -1009,6 +1009,16 @@ put_devs: kfree(devs.devices); } +unsigned int vfio_msi_get_irq(struct vfio_device *device, int vector, bool msix) +{ + struct vfio_pci_device *vdev = + (struct vfio_pci_device *)vfio_device_data(device); + struct pci_dev *pdev = vdev->pdev; + + return msix ? vdev->msix[vector].vector : pdev->irq + vector; +} +EXPORT_SYMBOL_GPL(vfio_msi_get_irq); + static void __exit vfio_pci_cleanup(void) { pci_unregister_driver(&vfio_pci_driver); diff --git a/include/linux/vfio.h b/include/linux/vfio.h index d320411..007ca55 100644 --- a/include/linux/vfio.h +++ b/include/linux/vfio.h @@ -92,6 +92,8 @@ extern void vfio_unregister_iommu_driver( /* * External user API */ +extern unsigned int vfio_msi_get_irq(struct vfio_device *device, int vector, + bool msix); extern struct vfio_group *vfio_group_get_external_user(struct file *filep); extern void vfio_group_put_external_user(struct vfio_group *group); extern int vfio_external_user_iommu_id(struct vfio_group *group); -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq 2014-11-20 9:05 ` [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq Feng Wu @ 2014-11-20 16:05 ` Alex Williamson 2014-11-20 16:12 ` Eric Auger 0 siblings, 1 reply; 8+ messages in thread From: Alex Williamson @ 2014-11-20 16:05 UTC (permalink / raw) To: Feng Wu; +Cc: pbonzini, kvm, eric.auger On Thu, 2014-11-20 at 17:05 +0800, Feng Wu wrote: > This API returns the host irq for the MSI/MSI-X interrrupts. > > Signed-off-by: Feng Wu <feng.wu@intel.com> > --- > drivers/vfio/pci/vfio_pci.c | 10 ++++++++++ > include/linux/vfio.h | 2 ++ > 2 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c > index 9558da3..4fb9828 100644 > --- a/drivers/vfio/pci/vfio_pci.c > +++ b/drivers/vfio/pci/vfio_pci.c > @@ -1009,6 +1009,16 @@ put_devs: > kfree(devs.devices); > } > > +unsigned int vfio_msi_get_irq(struct vfio_device *device, int vector, bool msix) > +{ > + struct vfio_pci_device *vdev = > + (struct vfio_pci_device *)vfio_device_data(device); > + struct pci_dev *pdev = vdev->pdev; > + > + return msix ? vdev->msix[vector].vector : pdev->irq + vector; > +} > +EXPORT_SYMBOL_GPL(vfio_msi_get_irq); > + It's difficult to see what you're going to do with this, but it's making the assumption that the vfio_device is a vfio_pci_device, which is the wrong starting point. Eric proposed[1] some VFIO external user interface extensions, that have since been refined in discussion that allows the external user (KVM in this case) access to the struct device where it can get the IRQ vectors itself. We either need to follow that same path for posted interrupts, teaching KVM about struct pci_device in order to extract the IRQ info, or we need to create another vfio external user interface extension that can return IRQ info regardless of the device type. Thanks, Alex [1] https://lkml.org/lkml/2014/8/25/257 > static void __exit vfio_pci_cleanup(void) > { > pci_unregister_driver(&vfio_pci_driver); > diff --git a/include/linux/vfio.h b/include/linux/vfio.h > index d320411..007ca55 100644 > --- a/include/linux/vfio.h > +++ b/include/linux/vfio.h > @@ -92,6 +92,8 @@ extern void vfio_unregister_iommu_driver( > /* > * External user API > */ > +extern unsigned int vfio_msi_get_irq(struct vfio_device *device, int vector, > + bool msix); > extern struct vfio_group *vfio_group_get_external_user(struct file *filep); > extern void vfio_group_put_external_user(struct vfio_group *group); > extern int vfio_external_user_iommu_id(struct vfio_group *group); ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq 2014-11-20 16:05 ` Alex Williamson @ 2014-11-20 16:12 ` Eric Auger 0 siblings, 0 replies; 8+ messages in thread From: Eric Auger @ 2014-11-20 16:12 UTC (permalink / raw) To: Alex Williamson, Feng Wu; +Cc: pbonzini, kvm On 11/20/2014 05:05 PM, Alex Williamson wrote: > On Thu, 2014-11-20 at 17:05 +0800, Feng Wu wrote: >> This API returns the host irq for the MSI/MSI-X interrrupts. >> >> Signed-off-by: Feng Wu <feng.wu@intel.com> >> --- >> drivers/vfio/pci/vfio_pci.c | 10 ++++++++++ >> include/linux/vfio.h | 2 ++ >> 2 files changed, 12 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c >> index 9558da3..4fb9828 100644 >> --- a/drivers/vfio/pci/vfio_pci.c >> +++ b/drivers/vfio/pci/vfio_pci.c >> @@ -1009,6 +1009,16 @@ put_devs: >> kfree(devs.devices); >> } >> >> +unsigned int vfio_msi_get_irq(struct vfio_device *device, int vector, bool msix) >> +{ >> + struct vfio_pci_device *vdev = >> + (struct vfio_pci_device *)vfio_device_data(device); >> + struct pci_dev *pdev = vdev->pdev; >> + >> + return msix ? vdev->msix[vector].vector : pdev->irq + vector; >> +} >> +EXPORT_SYMBOL_GPL(vfio_msi_get_irq); >> + > > It's difficult to see what you're going to do with this, but it's making > the assumption that the vfio_device is a vfio_pci_device, which is the > wrong starting point. Eric proposed[1] some VFIO external user > interface extensions, that have since been refined in discussion that > allows the external user (KVM in this case) access to the struct device > where it can get the IRQ vectors itself. We either need to follow that > same path for posted interrupts, teaching KVM about struct pci_device in > order to extract the IRQ info, or we need to create another vfio > external user interface extension that can return IRQ info regardless of > the device type. Thanks, > > Alex > > > [1] https://lkml.org/lkml/2014/8/25/257 Here is the v2: https://lkml.org/lkml/2014/9/1/347 Best Regards Eric > http://lwn.net/Articles/610087/ >> static void __exit vfio_pci_cleanup(void) >> { >> pci_unregister_driver(&vfio_pci_driver); >> diff --git a/include/linux/vfio.h b/include/linux/vfio.h >> index d320411..007ca55 100644 >> --- a/include/linux/vfio.h >> +++ b/include/linux/vfio.h >> @@ -92,6 +92,8 @@ extern void vfio_unregister_iommu_driver( >> /* >> * External user API >> */ >> +extern unsigned int vfio_msi_get_irq(struct vfio_device *device, int vector, >> + bool msix); >> extern struct vfio_group *vfio_group_get_external_user(struct file *filep); >> extern void vfio_group_put_external_user(struct vfio_group *group); >> extern int vfio_external_user_iommu_id(struct vfio_group *group); > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-11-21 19:35 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-20 9:05 [RFC PATCH v1 0/2] Define some VFIO interfaces for VT-d Posted-Interrupts Feng Wu
2014-11-20 9:05 ` [RFC PATCH v1 1/2] vfio: Add new interrupt group for VFIO Feng Wu
2014-11-20 15:53 ` Alex Williamson
2014-11-20 16:03 ` Eric Auger
[not found] ` <E959C4978C3B6342920538CF579893F0022A8711@SHSMSX104.ccr.corp.intel.com>
2014-11-21 19:35 ` Alex Williamson
2014-11-20 9:05 ` [RFC PATCH v1 2/2] vfio: Add VFIO API vfio_msi_get_irq Feng Wu
2014-11-20 16:05 ` Alex Williamson
2014-11-20 16:12 ` Eric Auger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox