diff options
Diffstat (limited to 'arch/powerpc/kernel/iommu.c')
-rw-r--r-- | arch/powerpc/kernel/iommu.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index 5d3968c4d799..b054f33ab1fb 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
@@ -1175,4 +1175,30 @@ void iommu_del_device(struct device *dev) | |||
1175 | } | 1175 | } |
1176 | EXPORT_SYMBOL_GPL(iommu_del_device); | 1176 | EXPORT_SYMBOL_GPL(iommu_del_device); |
1177 | 1177 | ||
1178 | static int tce_iommu_bus_notifier(struct notifier_block *nb, | ||
1179 | unsigned long action, void *data) | ||
1180 | { | ||
1181 | struct device *dev = data; | ||
1182 | |||
1183 | switch (action) { | ||
1184 | case BUS_NOTIFY_ADD_DEVICE: | ||
1185 | return iommu_add_device(dev); | ||
1186 | case BUS_NOTIFY_DEL_DEVICE: | ||
1187 | if (dev->iommu_group) | ||
1188 | iommu_del_device(dev); | ||
1189 | return 0; | ||
1190 | default: | ||
1191 | return 0; | ||
1192 | } | ||
1193 | } | ||
1194 | |||
1195 | static struct notifier_block tce_iommu_bus_nb = { | ||
1196 | .notifier_call = tce_iommu_bus_notifier, | ||
1197 | }; | ||
1198 | |||
1199 | int __init tce_iommu_bus_notifier_init(void) | ||
1200 | { | ||
1201 | bus_register_notifier(&pci_bus_type, &tce_iommu_bus_nb); | ||
1202 | return 0; | ||
1203 | } | ||
1178 | #endif /* CONFIG_IOMMU_API */ | 1204 | #endif /* CONFIG_IOMMU_API */ |