powerpc/vfio_spapr_tce: Add reference counting to iommu_table
So far iommu_table obejcts were only used in virtual mode and had a single owner. We are going to change this by implementing in-kernel acceleration of DMA mapping requests. The proposed acceleration will handle requests in real mode and KVM will keep references to tables. This adds a kref to iommu_table and defines new helpers to update it. This replaces iommu_free_table() with iommu_tce_table_put() and makes iommu_free_table() static. iommu_tce_table_get() is not used in this patch but it will be in the following patch. Since this touches prototypes, this also removes @node_name parameter as it has never been really useful on powernv and carrying it for the pseries platform code to iommu_free_table() seems to be quite useless as well. This should cause no behavioral change. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Acked-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
11edf116e3
commit
e5afdf9dd5
@@ -74,6 +74,7 @@ static struct iommu_table_group *iommu_pseries_alloc_group(int node)
|
||||
goto fail_exit;
|
||||
|
||||
INIT_LIST_HEAD_RCU(&tbl->it_group_list);
|
||||
kref_init(&tbl->it_kref);
|
||||
tgl->table_group = table_group;
|
||||
list_add_rcu(&tgl->next, &tbl->it_group_list);
|
||||
|
||||
@@ -115,7 +116,7 @@ static void iommu_pseries_free_group(struct iommu_table_group *table_group,
|
||||
BUG_ON(table_group->group);
|
||||
}
|
||||
#endif
|
||||
iommu_free_table(tbl, node_name);
|
||||
iommu_tce_table_put(tbl);
|
||||
|
||||
kfree(table_group);
|
||||
}
|
||||
|
@@ -1318,7 +1318,7 @@ static void vio_dev_release(struct device *dev)
|
||||
struct iommu_table *tbl = get_iommu_table_base(dev);
|
||||
|
||||
if (tbl)
|
||||
iommu_free_table(tbl, of_node_full_name(dev->of_node));
|
||||
iommu_tce_table_put(tbl);
|
||||
of_node_put(dev->of_node);
|
||||
kfree(to_vio_dev(dev));
|
||||
}
|
||||
|
Reference in New Issue
Block a user