Commit 5b30fbfa authored by Thierry Reding's avatar Thierry Reding Committed by Joerg Roedel

iommu/tegra-smmu: Balance IOMMU group reference count

For groups that are shared between multiple devices, care must be taken
to acquire a reference for each device, otherwise the IOMMU core ends up
dropping the last reference too early, which will cause the group to be
released while consumers may still be thinking that they're holding a
reference to it.
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20200806155404.3936074-3-thierry.reding@gmail.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 00295702
......@@ -818,6 +818,7 @@ static struct iommu_group *tegra_smmu_group_get(struct tegra_smmu *smmu,
{
const struct tegra_smmu_group_soc *soc;
struct tegra_smmu_group *group;
struct iommu_group *grp;
soc = tegra_smmu_find_group(smmu, swgroup);
if (!soc)
......@@ -827,8 +828,9 @@ static struct iommu_group *tegra_smmu_group_get(struct tegra_smmu *smmu,
list_for_each_entry(group, &smmu->groups, list)
if (group->soc == soc) {
grp = iommu_group_ref_get(group->group);
mutex_unlock(&smmu->lock);
return group->group;
return grp;
}
group = devm_kzalloc(smmu->dev, sizeof(*group), GFP_KERNEL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment