iommu/tegra: gart: Don't use managed resources
GART is a part of the Memory Controller driver that is always built-in, hence there is no benefit from the use of managed resources. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Acked-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
7d849b7b40
commit
167d67d550
|
@ -173,7 +173,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain,
|
||||||
struct gart_client *client, *c;
|
struct gart_client *client, *c;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
client = devm_kzalloc(gart->dev, sizeof(*c), GFP_KERNEL);
|
client = kzalloc(sizeof(*c), GFP_KERNEL);
|
||||||
if (!client)
|
if (!client)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
client->dev = dev;
|
client->dev = dev;
|
||||||
|
@ -199,7 +199,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
devm_kfree(gart->dev, client);
|
kfree(client);
|
||||||
spin_unlock(&gart->client_lock);
|
spin_unlock(&gart->client_lock);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -214,7 +214,7 @@ static void __gart_iommu_detach_dev(struct iommu_domain *domain,
|
||||||
list_for_each_entry(c, &gart->client, list) {
|
list_for_each_entry(c, &gart->client, list) {
|
||||||
if (c->dev == dev) {
|
if (c->dev == dev) {
|
||||||
list_del(&c->list);
|
list_del(&c->list);
|
||||||
devm_kfree(gart->dev, c);
|
kfree(c);
|
||||||
if (list_empty(&gart->client))
|
if (list_empty(&gart->client))
|
||||||
gart->active_domain = NULL;
|
gart->active_domain = NULL;
|
||||||
dev_dbg(gart->dev, "Detached %s\n", dev_name(dev));
|
dev_dbg(gart->dev, "Detached %s\n", dev_name(dev));
|
||||||
|
@ -455,7 +455,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc)
|
||||||
return ERR_PTR(-ENXIO);
|
return ERR_PTR(-ENXIO);
|
||||||
}
|
}
|
||||||
|
|
||||||
gart = devm_kzalloc(dev, sizeof(*gart), GFP_KERNEL);
|
gart = kzalloc(sizeof(*gart), GFP_KERNEL);
|
||||||
if (!gart) {
|
if (!gart) {
|
||||||
dev_err(dev, "failed to allocate gart_device\n");
|
dev_err(dev, "failed to allocate gart_device\n");
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
@ -464,7 +464,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc)
|
||||||
ret = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart");
|
ret = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart");
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Failed to register IOMMU in sysfs\n");
|
dev_err(dev, "Failed to register IOMMU in sysfs\n");
|
||||||
return ERR_PTR(ret);
|
goto free_gart;
|
||||||
}
|
}
|
||||||
|
|
||||||
iommu_device_set_ops(&gart->iommu, &gart_iommu_ops);
|
iommu_device_set_ops(&gart->iommu, &gart_iommu_ops);
|
||||||
|
@ -502,6 +502,8 @@ unregister_iommu:
|
||||||
iommu_device_unregister(&gart->iommu);
|
iommu_device_unregister(&gart->iommu);
|
||||||
remove_sysfs:
|
remove_sysfs:
|
||||||
iommu_device_sysfs_remove(&gart->iommu);
|
iommu_device_sysfs_remove(&gart->iommu);
|
||||||
|
free_gart:
|
||||||
|
kfree(gart);
|
||||||
|
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue