aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Murphy <robin.murphy@arm.com>2016-11-11 12:59:23 -0500
committerJoerg Roedel <jroedel@suse.de>2016-11-15 06:25:33 -0500
commitf2f101f6bcb3c47a432543dd309056e58192550f (patch)
treefa7da845cdaba345ecd76dcd35add6f87980fd97
parente1b44cbe7b5d4d97e43a1476b68e0adc1aa5e383 (diff)
iommu/amd: Fix group refcounting
If acpihid_device_group() finds an existing group for the relevant devid, it should be taking an additional reference on that group. 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>
-rw-r--r--drivers/iommu/amd_iommu.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 754595ee11b6..019e02707cd5 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -373,6 +373,8 @@ static struct iommu_group *acpihid_device_group(struct device *dev)
373 373
374 if (!entry->group) 374 if (!entry->group)
375 entry->group = generic_device_group(dev); 375 entry->group = generic_device_group(dev);
376 else
377 iommu_group_ref_get(entry->group);
376 378
377 return entry->group; 379 return entry->group;
378} 380}