[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kvm
Subject:    Re: [RFC PATCH v3 3/5] PCI: Add host bridge attribute to indicate filtering of MSIs is supported
From:       Alex Williamson <alex.williamson () redhat ! com>
Date:       2016-01-29 19:05:44
Message-ID: 163133676.20416948.1454094344181.JavaMail.zimbra () redhat ! com
[Download RAW message or body]



----- Original Message -----
> On 2016/1/29 6:46, Alex Williamson wrote:
> > On Fri, 2016-01-15 at 15:06 +0800, Yongji Xie wrote:
> > > MSI-X tables are not allowed to be mmapped in vfio-pci
> > > driver in case that user get to touch this directly.
> > > This will cause some performance issues when when PCI
> > > adapters have critical registers in the same page as
> > > the MSI-X table.
> > > 
> > > However, some kind of PCI host bridge such as IODA bridge
> > > on Power support filtering of MSIs, which can ensure that a
> > > given pci device can only shoot the MSIs assigned for it.
> > > So we think it's safe to expose the MSI-X table to userspace
> > > if filtering of MSIs is supported because the exposed MSI-X
> > > table can't be used to do harm to other memory space.
> > > 
> > > To support this case, this patch adds a pci_host_bridge
> > > attribute to indicate if this PCI host bridge supports
> > > filtering of MSIs.
> > > 
> > > Signed-off-by: Yongji Xie <xyjxie@linux.vnet.ibm.com>
> > > ---
> > > drivers/pci/host-bridge.c |    6 ++++++
> > > include/linux/pci.h       |    3 +++
> > > 2 files changed, 9 insertions(+)
> > > 
> > > diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
> > > index 5f4a2e0..c029267 100644
> > > --- a/drivers/pci/host-bridge.c
> > > +++ b/drivers/pci/host-bridge.c
> > > @@ -96,3 +96,9 @@ void pcibios_bus_to_resource(struct pci_bus *bus, struct
> > > resource *res,
> > > 	res->end = region->end + offset;
> > > }
> > > EXPORT_SYMBOL(pcibios_bus_to_resource);
> > > +
> > > +bool pci_host_bridge_msi_filtered_enabled(struct pci_dev *pdev)
> > > +{
> > > +	return pci_find_host_bridge(pdev->bus)->msi_filtered;
> > > +}
> > > +EXPORT_SYMBOL_GPL(pci_host_bridge_msi_filtered_enabled);
> > > diff --git a/include/linux/pci.h b/include/linux/pci.h
> > > index b640d65..b952b78 100644
> > > --- a/include/linux/pci.h
> > > +++ b/include/linux/pci.h
> > > @@ -412,6 +412,7 @@ struct pci_host_bridge {
> > > 	void (*release_fn)(struct pci_host_bridge *);
> > > 	void *release_data;
> > > 	unsigned int ignore_reset_delay:1;	/* for entire hierarchy */
> > > +	unsigned int msi_filtered:1;	/* support filtering of MSIs */
> > > 	/* Resource alignment requirements */
> > > 	resource_size_t (*align_resource)(struct pci_dev *dev,
> > > 			const struct resource *res,
> > > @@ -430,6 +431,8 @@ void pci_set_host_bridge_release(struct
> > > pci_host_bridge *bridge,
> > > 
> > > int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge);
> > > 
> > > +bool pci_host_bridge_msi_filtered_enabled(struct pci_dev *pdev);
> > > +
> > > /*
> > > * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that
> > > correspond
> > > * to P2P or CardBus bridge windows) go in a table.  Additional ones
> > > (for
> > Don't we already have a flag for this in the IOMMU space?
> > 
> > enum iommu_cap {
> > IOMMU_CAP_CACHE_COHERENCY,      /* IOMMU can enforce cache
> > coherent DMA
> > transactions */
> > --->    IOMMU_CAP_INTR_REMAP,           /* IOMMU supports interrupt
> > isolation */
> > IOMMU_CAP_NOEXEC,               /* IOMMU_NOEXEC flag */
> > };
> > 
> 
> I saw this flag had been enabled in x86 and ARM arch.
> 
> I'm not sure whether we can mmap MSI-X table in those archs. I just
> verify it on PPC64 arch.

Unfortunately that's not a very good excuse for creating an alternate implementation. \
When x86 implements interrupt remapping, we get fine grained isolation of MSI vectors \
and we've always taken this flag to mean that the system is isolated from devices \
that may perform DoS attacks with MSI writes.  I'm not entirely sure whether ARM \
really provides that degree of isolation, but they would be incorrect is exposing the \
capability if they do not.  Thanks,

Alex
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic