aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNishanth Aravamudan <nacc@us.ibm.com>2010-09-15 04:05:48 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2010-10-13 01:19:21 -0400
commit45848e0fc1fce399651b3f480bdeb82cc6d3d15a (patch)
tree72bbf790385b305be750ce0cab4e36ceee07913f /arch
parentedea8f6f48416d9a6fd1babb76c19cf05c802325 (diff)
powerpc/viobus: Free TCE table on device release
Release the TCE table as the XXX suggests, except on FW_FEATURE_ISERIES, where the tables are allocated globally and reused. Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kernel/vio.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index 72db4b021762..d692989a4318 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -1184,7 +1184,12 @@ EXPORT_SYMBOL(vio_unregister_driver);
1184/* vio_dev refcount hit 0 */ 1184/* vio_dev refcount hit 0 */
1185static void __devinit vio_dev_release(struct device *dev) 1185static void __devinit vio_dev_release(struct device *dev)
1186{ 1186{
1187 /* XXX should free TCE table */ 1187 struct iommu_table *tbl = get_iommu_table_base(dev);
1188
1189 /* iSeries uses a common table for all vio devices */
1190 if (!firmware_has_feature(FW_FEATURE_ISERIES) && tbl)
1191 iommu_free_table(tbl, dev->of_node ?
1192 dev->of_node->full_name : dev_name(dev));
1188 of_node_put(dev->of_node); 1193 of_node_put(dev->of_node);
1189 kfree(to_vio_dev(dev)); 1194 kfree(to_vio_dev(dev));
1190} 1195}