This clears the TCE table when a container is being closed as this is
a good thing to leave the table clean before passing the ownership
back to the host kernel.

Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
---
 drivers/vfio/vfio_iommu_spapr_tce.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c 
b/drivers/vfio/vfio_iommu_spapr_tce.c
index 6c59339..756831f 100644
--- a/drivers/vfio/vfio_iommu_spapr_tce.c
+++ b/drivers/vfio/vfio_iommu_spapr_tce.c
@@ -134,16 +134,24 @@ static void *tce_iommu_open(unsigned long arg)
        return container;
 }
 
+static int tce_iommu_clear(struct tce_container *container,
+               struct iommu_table *tbl,
+               unsigned long entry, unsigned long pages);
+
 static void tce_iommu_release(void *iommu_data)
 {
        struct tce_container *container = iommu_data;
+       struct iommu_table *tbl = container->tbl;
 
-       WARN_ON(container->tbl && !container->tbl->it_group);
+       WARN_ON(tbl && !tbl->it_group);
        tce_iommu_disable(container);
 
-       if (container->tbl && container->tbl->it_group)
-               tce_iommu_detach_group(iommu_data, container->tbl->it_group);
+       if (tbl) {
+               tce_iommu_clear(container, tbl, tbl->it_offset, tbl->it_size);
 
+               if (tbl->it_group)
+                       tce_iommu_detach_group(iommu_data, tbl->it_group);
+       }
        mutex_destroy(&container->lock);
 
        kfree(container);
-- 
2.0.0

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

Reply via email to