diff options
author | Nishanth Aravamudan <nacc@us.ibm.com> | 2010-09-15 04:05:48 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-10-13 01:19:21 -0400 |
commit | 45848e0fc1fce399651b3f480bdeb82cc6d3d15a (patch) | |
tree | 72bbf790385b305be750ce0cab4e36ceee07913f /arch | |
parent | edea8f6f48416d9a6fd1babb76c19cf05c802325 (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.c | 7 |
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 */ |
1185 | static void __devinit vio_dev_release(struct device *dev) | 1185 | static 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 | } |