Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75058a30 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Fix device_state reference counting



The references to the device state are not dropped
everywhere. This might cause a dead-lock in
amd_iommu_free_device(). Fix it.

Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Tested-by: default avatarOded Gabbay <oded.gabbay@amd.com>
parent 8301da53
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -368,6 +368,9 @@ static void free_pasid_states(struct device_state *dev_state)

		put_pasid_state_wait(pasid_state); /* Reference taken in
						      amd_iommu_pasid_bind */

		/* Drop reference taken in amd_iommu_bind_pasid */
		put_device_state(dev_state);
	}

	if (dev_state->pasid_levels == 2)
@@ -748,6 +751,10 @@ void amd_iommu_unbind_pasid(struct pci_dev *pdev, int pasid)
	put_pasid_state_wait(pasid_state); /* Reference taken in
					      amd_iommu_pasid_bind */
out:
	/* Drop reference taken in this function */
	put_device_state(dev_state);

	/* Drop reference taken in amd_iommu_bind_pasid */
	put_device_state(dev_state);
}
EXPORT_SYMBOL(amd_iommu_unbind_pasid);