Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1411876 > unrolled thread

[RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table

Started byYongji Xie <xyjxie@linux.vnet.ibm.com>
First post2016-06-02 08:20 +0200
Last post2016-06-08 12:00 +0200
Articles 6 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table Yongji Xie <xyjxie@linux.vnet.ibm.com> - 2016-06-02 08:20 +0200
    [RESEND PATCH v2 4/6] iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization Yongji Xie <xyjxie@linux.vnet.ibm.com> - 2016-06-02 08:20 +0200
    Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X  table Alex Williamson <alex.williamson@redhat.com> - 2016-06-02 15:20 +0200
      Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X  table Yongji Xie <xyjxie@linux.vnet.ibm.com> - 2016-06-03 04:30 +0200
    Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X  table Auger Eric <eric.auger@redhat.com> - 2016-06-08 09:50 +0200
      Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X  table Yongji Xie <xyjxie@linux.vnet.ibm.com> - 2016-06-08 12:00 +0200

#1411876 — [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table

FromYongji Xie <xyjxie@linux.vnet.ibm.com>
Date2016-06-02 08:20 +0200
Subject[RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table
Message-ID<rFu94-2i2-17@gated-at.bofh.it>
Current vfio-pci implementation disallows to mmap the page
containing MSI-X table in case that users can write directly
to MSI-X table and generate an incorrect MSIs.

However, this will cause some performance issue when there
are some critical device registers in the same page as the 
MSI-X table. We have to handle the mmio access to these
registers in QEMU emulation rather than in guest.

To solve this issue, this series allows to expose MSI-X table
to userspace when hardware enables the capability of interrupt
remapping which can ensure that a given PCI device can only
shoot the MSIs assigned for it. And we introduce a new bus_flags
PCI_BUS_FLAGS_MSI_REMAP to test this capability on PCI side
for different archs.

The patch 3 are based on the proposed patchset[1].

Changelog v2: 
- Make the commit log more clear
- Replace pci_bus_check_msi_remapping() with pci_bus_msi_isolated()
  so that we could clearly know what the function does
- Set PCI_BUS_FLAGS_MSI_REMAP in pci_create_root_bus() instead
  of iommu_bus_notifier()
- Reserve VFIO_REGION_INFO_FLAG_CAPS when we allow to mmap MSI-X
  table so that we can know whether we allow to mmap MSI-X table
  in QEMU

[1] https://www.mail-archive.com/linux-kernel%40vger.kernel.org/msg1138820.html

Yongji Xie (6):
  PCI: Add a new PCI_BUS_FLAGS_MSI_REMAP flag
  PCI: Set PCI_BUS_FLAGS_MSI_REMAP if MSI controller enables IRQ remapping
  PCI: Set PCI_BUS_FLAGS_MSI_REMAP if IOMMU have capability of IRQ remapping
  iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization
  pci-ioda: Set PCI_BUS_FLAGS_MSI_REMAP for IODA host bridge
  vfio-pci: Allow to expose MSI-X table to userspace if interrupt remapping is enabled

 arch/powerpc/platforms/powernv/pci-ioda.c |    8 ++++++++
 drivers/iommu/iommu.c                     |    8 ++++++++
 drivers/pci/msi.c                         |   15 +++++++++++++++
 drivers/pci/probe.c                       |    7 +++++++
 drivers/vfio/pci/vfio_pci.c               |   17 ++++++++++++++---
 drivers/vfio/pci/vfio_pci_rdwr.c          |    3 ++-
 include/linux/msi.h                       |    5 ++++-
 include/linux/pci.h                       |    1 +
 8 files changed, 59 insertions(+), 5 deletions(-)

-- 
1.7.9.5

[toc] | [next] | [standalone]


#1411877 — [RESEND PATCH v2 4/6] iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization

FromYongji Xie <xyjxie@linux.vnet.ibm.com>
Date2016-06-02 08:20 +0200
Subject[RESEND PATCH v2 4/6] iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization
Message-ID<rFu94-2i2-35@gated-at.bofh.it>
In reply to#1411876
Some iommu drivers would be initialized after PCI device
enumeration. So PCI_BUS_FLAGS_MSI_REMAP would not be set
when probing PCI devices although IOMMU enables capability
of IRQ remapping. This patch tests this capability and
set the flag when iommu driver is initialized.

Signed-off-by: Yongji Xie <xyjxie@linux.vnet.ibm.com>
---
 drivers/iommu/iommu.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index b9df141..e6159ab 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -872,6 +872,14 @@ static int add_iommu_group(struct device *dev, void *data)
 	const struct iommu_ops *ops = cb->ops;
 	int ret;
 
+	/*
+	 * Set PCI_BUS_FLAGS_MSI_REMAP for all PCI buses when IOMMU
+	 * have capability of IRQ remapping.
+	 */
+	if (dev_is_pci(dev) && ops->capable &&
+			ops->capable(IOMMU_CAP_INTR_REMAP))
+		to_pci_dev(dev)->bus->bus_flags |= PCI_BUS_FLAGS_MSI_REMAP;
+
 	if (!ops->add_device)
 		return 0;
 
-- 
1.7.9.5

[toc] | [prev] | [next] | [standalone]


#1412223 — Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table

FromAlex Williamson <alex.williamson@redhat.com>
Date2016-06-02 15:20 +0200
SubjectRe: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table
Message-ID<rFAHv-6o5-15@gated-at.bofh.it>
In reply to#1411876
AFAICT, you posted this *3* days ago, has something changed here or is
this just expedited nagging for review?  This also depends on a
non-upstream series and crosses multiple functional areas, all of which
make it difficult for maintainers to actually do anything with this
series.  Thanks,

Alex

On Thu,  2 Jun 2016 14:09:57 +0800
Yongji Xie <xyjxie@linux.vnet.ibm.com> wrote:

> Current vfio-pci implementation disallows to mmap the page
> containing MSI-X table in case that users can write directly
> to MSI-X table and generate an incorrect MSIs.
> 
> However, this will cause some performance issue when there
> are some critical device registers in the same page as the 
> MSI-X table. We have to handle the mmio access to these
> registers in QEMU emulation rather than in guest.
> 
> To solve this issue, this series allows to expose MSI-X table
> to userspace when hardware enables the capability of interrupt
> remapping which can ensure that a given PCI device can only
> shoot the MSIs assigned for it. And we introduce a new bus_flags
> PCI_BUS_FLAGS_MSI_REMAP to test this capability on PCI side
> for different archs.
> 
> The patch 3 are based on the proposed patchset[1].
> 
> Changelog v2: 
> - Make the commit log more clear
> - Replace pci_bus_check_msi_remapping() with pci_bus_msi_isolated()
>   so that we could clearly know what the function does
> - Set PCI_BUS_FLAGS_MSI_REMAP in pci_create_root_bus() instead
>   of iommu_bus_notifier()
> - Reserve VFIO_REGION_INFO_FLAG_CAPS when we allow to mmap MSI-X
>   table so that we can know whether we allow to mmap MSI-X table
>   in QEMU
> 
> [1] https://www.mail-archive.com/linux-kernel%40vger.kernel.org/msg1138820.html
> 
> Yongji Xie (6):
>   PCI: Add a new PCI_BUS_FLAGS_MSI_REMAP flag
>   PCI: Set PCI_BUS_FLAGS_MSI_REMAP if MSI controller enables IRQ remapping
>   PCI: Set PCI_BUS_FLAGS_MSI_REMAP if IOMMU have capability of IRQ remapping
>   iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization
>   pci-ioda: Set PCI_BUS_FLAGS_MSI_REMAP for IODA host bridge
>   vfio-pci: Allow to expose MSI-X table to userspace if interrupt remapping is enabled
> 
>  arch/powerpc/platforms/powernv/pci-ioda.c |    8 ++++++++
>  drivers/iommu/iommu.c                     |    8 ++++++++
>  drivers/pci/msi.c                         |   15 +++++++++++++++
>  drivers/pci/probe.c                       |    7 +++++++
>  drivers/vfio/pci/vfio_pci.c               |   17 ++++++++++++++---
>  drivers/vfio/pci/vfio_pci_rdwr.c          |    3 ++-
>  include/linux/msi.h                       |    5 ++++-
>  include/linux/pci.h                       |    1 +
>  8 files changed, 59 insertions(+), 5 deletions(-)
> 

[toc] | [prev] | [next] | [standalone]


#1412700 — Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table

FromYongji Xie <xyjxie@linux.vnet.ibm.com>
Date2016-06-03 04:30 +0200
SubjectRe: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table
Message-ID<rFN21-5JP-7@gated-at.bofh.it>
In reply to#1412223
Hi, Alex

On 2016/6/2 21:11, Alex Williamson wrote:

> AFAICT, you posted this *3* days ago, has something changed here or is
> this just expedited nagging for review?  This also depends on a
> non-upstream series and crosses multiple functional areas, all of which
> make it difficult for maintainers to actually do anything with this
> series.  Thanks,
>
> Alex

I resend this series because I found the message-id of the previous email
is changed unexpectedly. The cover letter is not in the same thread as other
patches.  It would be a little hard for people to review.

Thanks,
Yongji

> On Thu,  2 Jun 2016 14:09:57 +0800
> Yongji Xie <xyjxie@linux.vnet.ibm.com> wrote:
>
>> Current vfio-pci implementation disallows to mmap the page
>> containing MSI-X table in case that users can write directly
>> to MSI-X table and generate an incorrect MSIs.
>>
>> However, this will cause some performance issue when there
>> are some critical device registers in the same page as the
>> MSI-X table. We have to handle the mmio access to these
>> registers in QEMU emulation rather than in guest.
>>
>> To solve this issue, this series allows to expose MSI-X table
>> to userspace when hardware enables the capability of interrupt
>> remapping which can ensure that a given PCI device can only
>> shoot the MSIs assigned for it. And we introduce a new bus_flags
>> PCI_BUS_FLAGS_MSI_REMAP to test this capability on PCI side
>> for different archs.
>>
>> The patch 3 are based on the proposed patchset[1].
>>
>> Changelog v2:
>> - Make the commit log more clear
>> - Replace pci_bus_check_msi_remapping() with pci_bus_msi_isolated()
>>    so that we could clearly know what the function does
>> - Set PCI_BUS_FLAGS_MSI_REMAP in pci_create_root_bus() instead
>>    of iommu_bus_notifier()
>> - Reserve VFIO_REGION_INFO_FLAG_CAPS when we allow to mmap MSI-X
>>    table so that we can know whether we allow to mmap MSI-X table
>>    in QEMU
>>
>> [1] https://www.mail-archive.com/linux-kernel%40vger.kernel.org/msg1138820.html
>>
>> Yongji Xie (6):
>>    PCI: Add a new PCI_BUS_FLAGS_MSI_REMAP flag
>>    PCI: Set PCI_BUS_FLAGS_MSI_REMAP if MSI controller enables IRQ remapping
>>    PCI: Set PCI_BUS_FLAGS_MSI_REMAP if IOMMU have capability of IRQ remapping
>>    iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization
>>    pci-ioda: Set PCI_BUS_FLAGS_MSI_REMAP for IODA host bridge
>>    vfio-pci: Allow to expose MSI-X table to userspace if interrupt remapping is enabled
>>
>>   arch/powerpc/platforms/powernv/pci-ioda.c |    8 ++++++++
>>   drivers/iommu/iommu.c                     |    8 ++++++++
>>   drivers/pci/msi.c                         |   15 +++++++++++++++
>>   drivers/pci/probe.c                       |    7 +++++++
>>   drivers/vfio/pci/vfio_pci.c               |   17 ++++++++++++++---
>>   drivers/vfio/pci/vfio_pci_rdwr.c          |    3 ++-
>>   include/linux/msi.h                       |    5 ++++-
>>   include/linux/pci.h                       |    1 +
>>   8 files changed, 59 insertions(+), 5 deletions(-)
>>

[toc] | [prev] | [next] | [standalone]


#1416992 — Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table

FromAuger Eric <eric.auger@redhat.com>
Date2016-06-08 09:50 +0200
SubjectRe: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table
Message-ID<rHGpr-5GS-5@gated-at.bofh.it>
In reply to#1411876
Hi Yongji,

Le 02/06/2016 à 08:09, Yongji Xie a écrit :
> Current vfio-pci implementation disallows to mmap the page
> containing MSI-X table in case that users can write directly
> to MSI-X table and generate an incorrect MSIs.
> 
> However, this will cause some performance issue when there
> are some critical device registers in the same page as the 
> MSI-X table. We have to handle the mmio access to these
> registers in QEMU emulation rather than in guest.
> 
> To solve this issue, this series allows to expose MSI-X table
> to userspace when hardware enables the capability of interrupt
> remapping which can ensure that a given PCI device can only
> shoot the MSIs assigned for it. And we introduce a new bus_flags
> PCI_BUS_FLAGS_MSI_REMAP to test this capability on PCI side
> for different archs.
> 
> The patch 3 are based on the proposed patchset[1].
You may have noticed I sent a respin of [1] yesterday:
http://www.gossamer-threads.com/lists/linux/kernel/2455187.

Unfortunately you will see I removed the patch defining the new
msi_domain_info MSI_FLAG_IRQ_REMAPPING flag you rely on in this series.
I did so because I was not using it anymore. At the beginning this was
used to detect whether the MSI assignment was safe but this
method was covering cases where the MSI controller was
upstream to the IOMMU. So now I rely on a mechanism where MSI controller
are supposed to register their MSI doorbells and tag whether it is safe.

I don't know yet how this change will be welcomed though. Depending
on reviews/discussions, might happen we revert to the previous flag.

If you need the feature you can embed the used patches in your series and
follow the review process separately. Sorry for the setback.

Best Regards

Eric
> 
> Changelog v2: 
> - Make the commit log more clear
> - Replace pci_bus_check_msi_remapping() with pci_bus_msi_isolated()
>   so that we could clearly know what the function does
> - Set PCI_BUS_FLAGS_MSI_REMAP in pci_create_root_bus() instead
>   of iommu_bus_notifier()
> - Reserve VFIO_REGION_INFO_FLAG_CAPS when we allow to mmap MSI-X
>   table so that we can know whether we allow to mmap MSI-X table
>   in QEMU
> 
> [1] https://www.mail-archive.com/linux-kernel%40vger.kernel.org/msg1138820.html
> 
> Yongji Xie (6):
>   PCI: Add a new PCI_BUS_FLAGS_MSI_REMAP flag
>   PCI: Set PCI_BUS_FLAGS_MSI_REMAP if MSI controller enables IRQ remapping
>   PCI: Set PCI_BUS_FLAGS_MSI_REMAP if IOMMU have capability of IRQ remapping
>   iommu: Set PCI_BUS_FLAGS_MSI_REMAP on iommu driver initialization
>   pci-ioda: Set PCI_BUS_FLAGS_MSI_REMAP for IODA host bridge
>   vfio-pci: Allow to expose MSI-X table to userspace if interrupt remapping is enabled
> 
>  arch/powerpc/platforms/powernv/pci-ioda.c |    8 ++++++++
>  drivers/iommu/iommu.c                     |    8 ++++++++
>  drivers/pci/msi.c                         |   15 +++++++++++++++
>  drivers/pci/probe.c                       |    7 +++++++
>  drivers/vfio/pci/vfio_pci.c               |   17 ++++++++++++++---
>  drivers/vfio/pci/vfio_pci_rdwr.c          |    3 ++-
>  include/linux/msi.h                       |    5 ++++-
>  include/linux/pci.h                       |    1 +
>  8 files changed, 59 insertions(+), 5 deletions(-)
> 

[toc] | [prev] | [next] | [standalone]


#1417224 — Re: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table

FromYongji Xie <xyjxie@linux.vnet.ibm.com>
Date2016-06-08 12:00 +0200
SubjectRe: [RESEND PATCH v2 0/6] vfio-pci: Add support for mmapping MSI-X table
Message-ID<rHIrh-6Wr-43@gated-at.bofh.it>
In reply to#1416992
Hi, Eric

On 2016/6/8 15:41, Auger Eric wrote:

> Hi Yongji,
>
> Le 02/06/2016 à 08:09, Yongji Xie a écrit :
>> Current vfio-pci implementation disallows to mmap the page
>> containing MSI-X table in case that users can write directly
>> to MSI-X table and generate an incorrect MSIs.
>>
>> However, this will cause some performance issue when there
>> are some critical device registers in the same page as the
>> MSI-X table. We have to handle the mmio access to these
>> registers in QEMU emulation rather than in guest.
>>
>> To solve this issue, this series allows to expose MSI-X table
>> to userspace when hardware enables the capability of interrupt
>> remapping which can ensure that a given PCI device can only
>> shoot the MSIs assigned for it. And we introduce a new bus_flags
>> PCI_BUS_FLAGS_MSI_REMAP to test this capability on PCI side
>> for different archs.
>>
>> The patch 3 are based on the proposed patchset[1].
> You may have noticed I sent a respin of [1] yesterday:
> http://www.gossamer-threads.com/lists/linux/kernel/2455187.
>
> Unfortunately you will see I removed the patch defining the new
> msi_domain_info MSI_FLAG_IRQ_REMAPPING flag you rely on in this series.
> I did so because I was not using it anymore. At the beginning this was
> used to detect whether the MSI assignment was safe but this
> method was covering cases where the MSI controller was
> upstream to the IOMMU. So now I rely on a mechanism where MSI controller
> are supposed to register their MSI doorbells and tag whether it is safe.
>
> I don't know yet how this change will be welcomed though. Depending
> on reviews/discussions, might happen we revert to the previous flag.
>
> If you need the feature you can embed the used patches in your series and
> follow the review process separately. Sorry for the setback.

Thanks for your notification. I'd better wait until your patches get
settled. Then I could exactly know which way we should use to test the
capability of interrupt remapping on ARM in my series.

Thanks,
Yongji

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web