Re: [PATCH 0/9 v2] vfio-pci: add support for Freescale IOMMU (PAMU)

From: Alex Williamson
Date: Wed Nov 20 2013 - 13:47:44 EST


On Tue, 2013-11-19 at 10:47 +0530, Bharat Bhushan wrote:
> From: Bharat Bhushan <bharat.bhushan@xxxxxxxxxxxxx>
>
> PAMU (FSL IOMMU) has a concept of primary window and subwindows.
> Primary window corresponds to the complete guest iova address space
> (including MSI space), with respect to IOMMU_API this is termed as
> geometry. IOVA Base of subwindow is determined from the number of
> subwindows (configurable using iommu API).
> MSI I/O page must be within the geometry and maximum supported
> subwindows, so MSI IO-page is setup just after guest memory iova space.
>
> So patch 1/9-4/9(inclusive) are for defining the interface to get:
> - Number of MSI regions (which is number of MSI banks for powerpc)
> - MSI-region address range: Physical page which have the
> address/addresses used for generating MSI interrupt
> and size of the page.
>
> Patch 5/9-7/9(inclusive) is defining the interface of setting up
> MSI iova-base for a msi region(bank) for a device. so that when
> msi-message will be composed then this configured iova will be used.
> Earlier we were using iommu interface for getting the configured iova
> which was not currect and Alex Williamson suggeested this type of interface.
>
> patch 8/9 moves some common functions in a separate file so that these
> can be used by FSL_PAMU implementation (next patch uses this).
> These will be used later for iommu-none implementation. I believe we
> can do more of this but will take step by step.
>
> Finally last patch actually adds the support for FSL-PAMU :)

Patches 1-3: msi_get_region needs to return an error an error (probably
-EINVAL) if called on a path where there's no backend implementation.
Otherwise the caller doesn't know that the data in the region pointer
isn't valid.

Patches 5&6: same as above for msi_set_iova, return an error if no
backend implementation.

Patch 7: Why does fsl_msi_del_iova_device bother to return anything if
it's always zero? Return -ENODEV when not found?

Patch 9:

vfio_handle_get_attr() passes random kernel data back to userspace in
the event of iommu_domain_get_attr() error.

vfio_handle_set_attr(): I don't see any data validation happening, is
iommu_domain_set_attr() really that safe?

For both of those, drop the pr_err on unknown attribute, it's sufficient
to return error.

Is VFIO_IOMMU_PAMU_GET_MSI_BANK_COUNT per aperture (ie. each vfio user
has $COUNT regions at their disposal exclusively)? Thanks,

Alex

> v1->v2
> - Added interface for setting msi iova for a msi region for a device.
> Earlier I added iommu interface for same but as per comment that is
> removed and now created a direct interface between vfio and msi.
> - Incorporated review comments (details is in individual patch)
>
> Bharat Bhushan (9):
> pci:msi: add weak function for returning msi region info
> pci: msi: expose msi region information functions
> powerpc: pci: Add arch specific msi region interface
> powerpc: msi: Extend the msi region interface to get info from
> fsl_msi
> pci/msi: interface to set an iova for a msi region
> powerpc: pci: Extend msi iova page setup to arch specific
> pci: msi: Extend msi iova setting interface to powerpc arch
> vfio: moving some functions in common file
> vfio pci: Add vfio iommu implementation for FSL_PAMU
>
> arch/powerpc/include/asm/machdep.h | 10 +
> arch/powerpc/kernel/msi.c | 28 +
> arch/powerpc/sysdev/fsl_msi.c | 132 +++++-
> arch/powerpc/sysdev/fsl_msi.h | 25 +-
> drivers/pci/msi.c | 35 ++
> drivers/vfio/Kconfig | 6 +
> drivers/vfio/Makefile | 5 +-
> drivers/vfio/vfio_iommu_common.c | 227 ++++++++
> drivers/vfio/vfio_iommu_common.h | 27 +
> drivers/vfio/vfio_iommu_fsl_pamu.c | 1003 ++++++++++++++++++++++++++++++++++++
> drivers/vfio/vfio_iommu_type1.c | 206 +--------
> include/linux/msi.h | 14 +
> include/linux/pci.h | 21 +
> include/uapi/linux/vfio.h | 100 ++++
> 14 files changed, 1623 insertions(+), 216 deletions(-)
> create mode 100644 drivers/vfio/vfio_iommu_common.c
> create mode 100644 drivers/vfio/vfio_iommu_common.h
> create mode 100644 drivers/vfio/vfio_iommu_fsl_pamu.c
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/