From: Yongji Xie <xyjxie@linux.vnet.ibm.com>
To: Gavin Shan <gwshan@linux.vnet.ibm.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-doc@vger.kernel.org, bhelgaas@google.com, corbet@lwn.net,
aik@ozlabs.ru, alex.williamson@redhat.com,
benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au,
warrier@linux.vnet.ibm.com, zhong@linux.vnet.ibm.com,
nikunj@linux.vnet.ibm.com, eric.auger@linaro.org,
will.deacon@arm.com, alistair@popple.id.au, ruscur@russell.cc
Subject: Re: [RFC v5 7/7] vfio-pci: Allow to mmap MSI-X table if interrupt remapping is supported
Date: Wed, 6 Apr 2016 11:28:48 +0800 [thread overview]
Message-ID: <57048270.9040802@linux.vnet.ibm.com> (raw)
In-Reply-To: <20160406000052.GA4545@gwshan>
On 2016/4/6 8:00, Gavin Shan wrote:
> On Tue, Apr 05, 2016 at 09:46:44PM +0800, Yongji Xie wrote:
>> This patch enables mmapping MSI-X tables if
>> hardware supports interrupt remapping which
>> can ensure that a given pci device can only
>> shoot the MSIs assigned for it.
>>
>> Signed-off-by: Yongji Xie <xyjxie@linux.vnet.ibm.com>
>> ---
>> drivers/vfio/pci/vfio_pci.c | 9 +++++++--
>> drivers/vfio/pci/vfio_pci_private.h | 1 +
>> drivers/vfio/pci/vfio_pci_rdwr.c | 2 +-
>> 3 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c
>> index c60d790..ef02896 100644
>> --- a/drivers/vfio/pci/vfio_pci.c
>> +++ b/drivers/vfio/pci/vfio_pci.c
>> @@ -201,6 +201,10 @@ static int vfio_pci_enable(struct vfio_pci_device *vdev)
>> } else
>> vdev->msix_bar = 0xFF;
>>
>> + if (iommu_capable(pdev->dev.bus, IOMMU_CAP_INTR_REMAP) ||
>> + pdev->bus->bus_flags | PCI_BUS_FLAGS_MSI_REMAP)
>> + vdev->msi_remap = true;
>> +
> I guess you probably need a "&" here. Otherwise, the condition
> is always true.
Yes, you are right. I'll fix it.
>> if (!vfio_vga_disabled() && vfio_pci_is_vga(pdev))
>> vdev->has_vga = true;
>>
>> @@ -635,7 +639,8 @@ static long vfio_pci_ioctl(void *device_data,
>> VFIO_REGION_INFO_FLAG_WRITE;
>> if (vdev->bar_mmap_supported[info.index]) {
>> info.flags |= VFIO_REGION_INFO_FLAG_MMAP;
>> - if (info.index == vdev->msix_bar) {
>> + if (info.index == vdev->msix_bar &&
>> + !vdev->msi_remap) {
>> ret = msix_sparse_mmap_cap(vdev, &caps);
>> if (ret)
>> return ret;
>> @@ -1067,7 +1072,7 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma)
>> if (req_start + req_len > phys_len)
>> return -EINVAL;
>>
>> - if (index == vdev->msix_bar) {
>> + if (index == vdev->msix_bar && !vdev->msi_remap) {
>> /*
>> * Disallow mmaps overlapping the MSI-X table; users don't
>> * get to touch this directly. We could find somewhere
>> diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h
>> index 0ea4c62..4f20963 100644
>> --- a/drivers/vfio/pci/vfio_pci_private.h
>> +++ b/drivers/vfio/pci/vfio_pci_private.h
>> @@ -78,6 +78,7 @@ struct vfio_pci_device {
>> int irq_type;
>> int num_regions;
>> struct vfio_pci_region *region;
>> + bool msi_remap;
>> u8 msi_qmax;
>> u8 msix_bar;
>> u16 msix_size;
>> diff --git a/drivers/vfio/pci/vfio_pci_rdwr.c b/drivers/vfio/pci/vfio_pci_rdwr.c
>> index 5ffd1d9..606ee3c 100644
>> --- a/drivers/vfio/pci/vfio_pci_rdwr.c
>> +++ b/drivers/vfio/pci/vfio_pci_rdwr.c
>> @@ -164,7 +164,7 @@ ssize_t vfio_pci_bar_rw(struct vfio_pci_device *vdev, char __user *buf,
>> } else
>> io = vdev->barmap[bar];
>>
>> - if (bar == vdev->msix_bar) {
>> + if (bar == vdev->msix_bar && !vdev->msi_remap) {
>> x_start = vdev->msix_offset;
>> x_end = vdev->msix_offset + vdev->msix_size;
>> }
> When PCI_BUS_FLAGS_MSI_REMAP is set, the MSIx table can be accessed by
> read/write interface except mmap(). The commit log doesn't mention it.
> It would be better if you have some words about it.
>
> Thanks,
> Gavin
>
OK. I will mention it in commit log.
Thanks,
Yongji
>> --
>> 1.7.9.5
>>
next prev parent reply other threads:[~2016-04-06 3:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-05 13:46 [RFC v5 6/7] PCI: Add a new bit to pci_bus_flags to indicate interrupt remapping Yongji Xie
2016-04-05 13:46 ` [RFC v5 7/7] vfio-pci: Allow to mmap MSI-X table if interrupt remapping is supported Yongji Xie
2016-04-06 0:00 ` Gavin Shan
2016-04-06 3:28 ` Yongji Xie [this message]
2016-04-06 14:45 ` Alex Williamson
2016-04-07 11:38 ` Yongji Xie
2016-04-07 14:23 ` Eric Auger
2016-04-08 8:14 ` Yongji Xie
2016-04-08 9:10 ` Eric Auger
2016-04-08 10:30 ` Yongji Xie
2016-04-06 0:11 ` [RFC v5 6/7] PCI: Add a new bit to pci_bus_flags to indicate interrupt remapping Gavin Shan
2016-04-06 3:18 ` Yongji Xie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57048270.9040802@linux.vnet.ibm.com \
--to=xyjxie@linux.vnet.ibm.com \
--cc=aik@ozlabs.ru \
--cc=alex.williamson@redhat.com \
--cc=alistair@popple.id.au \
--cc=benh@kernel.crashing.org \
--cc=bhelgaas@google.com \
--cc=corbet@lwn.net \
--cc=eric.auger@linaro.org \
--cc=gwshan@linux.vnet.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=nikunj@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=ruscur@russell.cc \
--cc=warrier@linux.vnet.ibm.com \
--cc=will.deacon@arm.com \
--cc=zhong@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.