Loading drivers/iommu/iommu.c +26 −9 Original line number Diff line number Diff line Loading @@ -753,6 +753,17 @@ static int add_iommu_group(struct device *dev, void *data) return ops->add_device(dev); } static int remove_iommu_group(struct device *dev, void *data) { struct iommu_callback_data *cb = data; const struct iommu_ops *ops = cb->ops; if (ops->remove_device && dev->iommu_group) ops->remove_device(dev); return 0; } static int iommu_bus_notifier(struct notifier_block *nb, unsigned long action, void *data) { Loading Loading @@ -821,19 +832,25 @@ static int iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops) nb->notifier_call = iommu_bus_notifier; err = bus_register_notifier(bus, nb); if (err) { kfree(nb); return err; } if (err) goto out_free; err = bus_for_each_dev(bus, NULL, &cb, add_iommu_group); if (err) { if (err) goto out_err; return 0; out_err: /* Clean up */ bus_for_each_dev(bus, NULL, &cb, remove_iommu_group); bus_unregister_notifier(bus, nb); out_free: kfree(nb); return err; } return 0; return err; } /** Loading Loading
drivers/iommu/iommu.c +26 −9 Original line number Diff line number Diff line Loading @@ -753,6 +753,17 @@ static int add_iommu_group(struct device *dev, void *data) return ops->add_device(dev); } static int remove_iommu_group(struct device *dev, void *data) { struct iommu_callback_data *cb = data; const struct iommu_ops *ops = cb->ops; if (ops->remove_device && dev->iommu_group) ops->remove_device(dev); return 0; } static int iommu_bus_notifier(struct notifier_block *nb, unsigned long action, void *data) { Loading Loading @@ -821,19 +832,25 @@ static int iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops) nb->notifier_call = iommu_bus_notifier; err = bus_register_notifier(bus, nb); if (err) { kfree(nb); return err; } if (err) goto out_free; err = bus_for_each_dev(bus, NULL, &cb, add_iommu_group); if (err) { if (err) goto out_err; return 0; out_err: /* Clean up */ bus_for_each_dev(bus, NULL, &cb, remove_iommu_group); bus_unregister_notifier(bus, nb); out_free: kfree(nb); return err; } return 0; return err; } /** Loading