diff options
author | Robin Murphy <robin.murphy@arm.com> | 2016-11-11 12:59:23 -0500 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2016-11-15 06:25:33 -0500 |
commit | f2f101f6bcb3c47a432543dd309056e58192550f (patch) | |
tree | fa7da845cdaba345ecd76dcd35add6f87980fd97 | |
parent | e1b44cbe7b5d4d97e43a1476b68e0adc1aa5e383 (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.c | 2 |
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 | } |