iommu/arm-smmu: Correct group reference count
authorPeng Fan <van.freenix@gmail.com>
Fri, 20 Nov 2015 08:56:18 +0000 (16:56 +0800)
committerWill Deacon <will.deacon@arm.com>
Thu, 17 Dec 2015 12:05:33 +0000 (12:05 +0000)
commit9a4a9d8c34bc0b0102e8a9dd67ee3910b0bfaeb4
treed3f00b4266cfbe5cc38473296e206c07d5e91159
parenta0eacd89e35e55aad284cc2e6865bf2dcf7037ba
iommu/arm-smmu: Correct group reference count

The basic flow for add a device:
 arm_smmu_add_device
        |->iommu_group_get_for_dev
            |->iommu_group_get
                     return group;  (1)
            |->ops->device_group : Init/increase reference count to/by 1.
            |->iommu_group_add_device : Increase reference count by 1.
     return group   (2)
        |->return 0;

Since we are adding one device, the flow is (2) and the group reference
count will be increased by 2. So, we need to add iommu_group_put at the
end of arm_smmu_add_device to decrease the count by 1.

Also take the failure path into consideration when fail to add a device.

Signed-off-by: Peng Fan <van.freenix@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/iommu/arm-smmu-v3.c
drivers/iommu/arm-smmu.c