summaryrefslogtreecommitdiff
path: root/drivers/vfio
diff options
context:
space:
mode:
authorBharat Bhushan <Bharat.Bhushan@freescale.com>2013-05-24 11:17:11 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-05-24 20:59:30 (GMT)
commitff57ace2c693e79016c5c1c2f83dc94332bb3ff8 (patch)
tree68f8cd4672928cb69fa536c3ba8f21fca66eabda /drivers/vfio
parent33d8d93d80b49d30572b5f0c964635b72f07e79c (diff)
downloadlinux-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.c9
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) {