diff options
author | Bharat Bhushan <Bharat.Bhushan@freescale.com> | 2013-05-24 11:17:11 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-05-24 20:59:30 (GMT) |
commit | ff57ace2c693e79016c5c1c2f83dc94332bb3ff8 (patch) | |
tree | 68f8cd4672928cb69fa536c3ba8f21fca66eabda /drivers/vfio | |
parent | 33d8d93d80b49d30572b5f0c964635b72f07e79c (diff) | |
download | linux-fsl-qoriq-ff57ace2c693e79016c5c1c2f83dc94332bb3ff8.tar.xz |
VFIO-PCI: Disable all iommu subwidow on exit cleanup
Only MSI/MSI-X subwindows were disabled in PAMU on cleanup and memory
mapping were not disabled.
Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
Change-Id: I51aaa072b187c2ad725897fe64fbacc26035c194
Reviewed-on: http://git.am.freescale.net:8181/2692
Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com>
Reviewed-by: Yoder Stuart-B08248 <stuart.yoder@freescale.com>
Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Diffstat (limited to 'drivers/vfio')
-rw-r--r-- | drivers/vfio/vfio_iommu_fsl_pamu.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/vfio/vfio_iommu_fsl_pamu.c b/drivers/vfio/vfio_iommu_fsl_pamu.c index 75dd13b..d19ca9f 100644 --- a/drivers/vfio/vfio_iommu_fsl_pamu.c +++ b/drivers/vfio/vfio_iommu_fsl_pamu.c @@ -225,13 +225,14 @@ static int iova_to_win(struct vfio_iommu *iommu, dma_addr_t iova) } /* Unmap DMA region */ -static long __vfio_dma_do_unmap(struct vfio_iommu *iommu, dma_addr_t iova, - long npage, int prot) +static long __vfio_dma_do_unmap(struct vfio_iommu *iommu, dma_addr_t iova_start, + long npage, int prot) { int win, win_start, win_end, i; long unlocked = 0; unsigned long size; unsigned int nr_pages; + dma_addr_t iova = iova_start; size = npage << PAGE_SHIFT; nr_pages = iommu->page_size / PAGE_SIZE; @@ -250,6 +251,7 @@ static long __vfio_dma_do_unmap(struct vfio_iommu *iommu, dma_addr_t iova, } /* Disable the subwindows */ + iova = iova_start; win_start = iova_to_win(iommu, iova); win_end = iova_to_win(iommu, iova + (npage << PAGE_SHIFT) - 1); for (win = win_start; win <= win_end ; win++) @@ -407,7 +409,7 @@ static int __vfio_dma_map(struct vfio_iommu *iommu, dma_addr_t iova, return -EINVAL; } - mapsize = min(iova_map - iova_end, iommu->page_size); + mapsize = min(iova_end - iova_map, iommu->page_size); if (mapsize < iommu->page_size) { pr_err("%s iova (%llx) not alligned to window size %llx\n", __func__, iova, iommu->page_size); @@ -914,7 +916,6 @@ static long vfio_iommu_fsl_pamu_ioctl(void *iommu_data, if (msi_map.argsz < minsz) return -EINVAL; - vfio_do_msi_map(iommu, &msi_map); return 0; } else if (cmd == VFIO_IOMMU_PAMU_UNMAP_MSI_BANK) { |