Daniel Marcovitch 534103bcd5 iommu/amd/iommu_v2: Fix pasid_state refcount dec hit 0 warning on pasid unbind
When unbinding pasid - a race condition exists vs outstanding page faults.

To prevent this, the pasid_state object contains a refcount.
    * set to 1 on pasid bind
    * incremented on each ppr notification start
    * decremented on each ppr notification done
    * decremented on pasid unbind

Since refcount_dec assumes that refcount will never reach 0:
  the current implementation causes the following to be invoked on
  pasid unbind:
        REFCOUNT_WARN("decrement hit 0; leaking memory")

Fix this issue by changing refcount_dec to refcount_dec_and_test
to explicitly handle refcount=1.

Fixes: 8bc54824da4e ("iommu/amd: Convert from atomic_t to refcount_t on pasid_state->count")
Signed-off-by: Daniel Marcovitch <dmarcovitch@nvidia.com>
Signed-off-by: Vasant Hegde <vasant.hegde@amd.com>
Link: https://lore.kernel.org/r/20230609105146.7773-2-vasant.hegde@amd.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
2023-07-14 16:16:44 +02:00
..
2023-06-29 11:00:17 -07:00
2023-07-06 22:25:06 -07:00
2023-07-03 12:56:23 -07:00
2023-06-29 11:00:17 -07:00
2023-07-03 12:56:23 -07:00
2023-06-28 16:43:10 -07:00
2023-07-06 09:56:53 -07:00
2023-06-29 08:09:31 -06:00
2023-07-03 15:38:26 -07:00
2023-06-29 16:03:58 -07:00
2023-07-06 09:48:31 -07:00
2023-06-29 11:00:17 -07:00
2023-07-06 22:42:54 -07:00
2023-06-29 11:00:17 -07:00
2023-07-03 12:56:23 -07:00
2023-07-08 12:28:00 -07:00
2023-07-03 12:56:23 -07:00
2023-06-29 15:28:33 -07:00
2023-07-03 11:26:05 -07:00
2023-07-08 12:08:39 -07:00
2023-07-05 10:42:32 -07:00
2023-07-06 10:06:04 -07:00
2023-07-03 10:55:04 -07:00
2023-06-28 14:02:03 -07:00
2023-06-29 14:58:26 -07:00
2023-07-01 08:58:41 -07:00
2023-07-05 21:38:13 -07:00
2023-06-29 15:22:19 -07:00
2023-07-05 12:55:06 -07:00
2023-07-06 19:20:23 -07:00
2023-07-03 17:03:05 -07:00
2023-06-29 15:22:19 -07:00
2023-07-03 10:43:10 -07:00
2023-07-08 12:35:18 -07:00
2023-07-06 19:24:11 -07:00
2023-07-05 10:42:32 -07:00
2023-07-08 12:35:18 -07:00
2023-06-29 15:22:19 -07:00
2023-07-08 12:35:18 -07:00
2023-07-03 15:38:26 -07:00
2023-06-30 15:22:09 -07:00
2023-07-03 15:38:26 -07:00
2023-07-03 11:31:01 -07:00