diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 9e445242f8ec..1fa59c6b6cd7 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -3023,7 +3023,6 @@ static int __bus_lookup_iommu_group(struct device *dev, void *priv) } data->group = group; - iommu_group_put(group); return 1; } @@ -3703,6 +3702,9 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) int i, idx; group = of_get_device_group(dev); + if (group) + goto finish; + for_each_cfg_sme(fwspec, i, idx) { if (group && smmu->s2crs[idx].group && group != smmu->s2crs[idx].group) { @@ -3729,6 +3731,7 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev) return NULL; } +finish: if (smmu->impl && smmu->impl->device_group && smmu->impl->device_group(dev, group)) { iommu_group_put(group);