diff options
author | Robin Murphy <robin.murphy@arm.com> | 2016-11-11 17:59:25 +0000 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2016-11-15 12:25:33 +0100 |
commit | 5d1d43b0f6231cfffde61f8774283f170c040776 (patch) | |
tree | dc484001bf398caf00ae78569801e3a5be3627ec /drivers/iommu/mtk_iommu_v1.c | |
parent | 3a8d40b6ce8c3f682d3b00a568d406b2f8726701 (diff) |
iommu/mediatek: Fix M4Uv1 group refcounting
For each subsequent device assigned to the m4u_group after its initial
allocation, we need to take an additional reference. Otherwise, the
caller of iommu_group_get_for_dev() will inadvertently remove the
reference taken by iommu_group_add_device(), and the group will be
freed prematurely if any device is removed.
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu/mtk_iommu_v1.c')
-rw-r--r-- | drivers/iommu/mtk_iommu_v1.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c index b8aeb0768483..c7063e9d67d8 100644 --- a/drivers/iommu/mtk_iommu_v1.c +++ b/drivers/iommu/mtk_iommu_v1.c @@ -502,6 +502,8 @@ static struct iommu_group *mtk_iommu_device_group(struct device *dev) data->m4u_group = iommu_group_alloc(); if (IS_ERR(data->m4u_group)) dev_err(dev, "Failed to allocate M4U IOMMU group\n"); + } else { + iommu_group_ref_get(data->m4u_group); } return data->m4u_group; } |