diff options
author | Ingo Molnar <mingo@kernel.org> | 2018-02-06 21:12:31 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2018-02-06 21:12:31 +0100 |
commit | 82845079160817cc6ac64e5321bbd935e0a47b3a (patch) | |
tree | 0886d1d52428e9db14536cae4b37db896e7c360a /drivers/gpu/host1x/dev.c | |
parent | 32e839dda3ba576943365f0f5817ce5c843137dc (diff) | |
parent | 68c5735eaa5e680e701c9a2d1e3c7880bdf5ab66 (diff) | |
download | linux-stable-82845079160817cc6ac64e5321bbd935e0a47b3a.tar.gz linux-stable-82845079160817cc6ac64e5321bbd935e0a47b3a.tar.bz2 linux-stable-82845079160817cc6ac64e5321bbd935e0a47b3a.zip |
Merge branch 'linus' into sched/urgent, to resolve conflicts
Conflicts:
arch/arm64/kernel/entry.S
arch/x86/Kconfig
include/linux/sched/mm.h
kernel/fork.c
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/gpu/host1x/dev.c')
-rw-r--r-- | drivers/gpu/host1x/dev.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c index bf67c3aeb634..03db71173f5d 100644 --- a/drivers/gpu/host1x/dev.c +++ b/drivers/gpu/host1x/dev.c @@ -218,20 +218,27 @@ static int host1x_probe(struct platform_device *pdev) return err; } - if (iommu_present(&platform_bus_type)) { + host->group = iommu_group_get(&pdev->dev); + if (host->group) { struct iommu_domain_geometry *geometry; unsigned long order; host->domain = iommu_domain_alloc(&platform_bus_type); - if (!host->domain) - return -ENOMEM; - - err = iommu_attach_device(host->domain, &pdev->dev); - if (err == -ENODEV) { - iommu_domain_free(host->domain); - host->domain = NULL; - goto skip_iommu; - } else if (err) { + if (!host->domain) { + err = -ENOMEM; + goto put_group; + } + + err = iommu_attach_group(host->domain, host->group); + if (err) { + if (err == -ENODEV) { + iommu_domain_free(host->domain); + host->domain = NULL; + iommu_group_put(host->group); + host->group = NULL; + goto skip_iommu; + } + goto fail_free_domain; } @@ -294,13 +301,15 @@ fail_unprepare_disable: fail_free_channels: host1x_channel_list_free(&host->channel_list); fail_detach_device: - if (host->domain) { + if (host->group && host->domain) { put_iova_domain(&host->iova); - iommu_detach_device(host->domain, &pdev->dev); + iommu_detach_group(host->domain, host->group); } fail_free_domain: if (host->domain) iommu_domain_free(host->domain); +put_group: + iommu_group_put(host->group); return err; } @@ -317,8 +326,9 @@ static int host1x_remove(struct platform_device *pdev) if (host->domain) { put_iova_domain(&host->iova); - iommu_detach_device(host->domain, &pdev->dev); + iommu_detach_group(host->domain, host->group); iommu_domain_free(host->domain); + iommu_group_put(host->group); } return 0; |