6
6
7
7
#define pr_fmt (fmt ) "AMD-Vi: " fmt
8
8
9
+ #include <linux/refcount.h>
9
10
#include <linux/mmu_notifier.h>
10
11
#include <linux/amd-iommu.h>
11
12
#include <linux/mm_types.h>
@@ -33,7 +34,7 @@ struct pri_queue {
33
34
34
35
struct pasid_state {
35
36
struct list_head list ; /* For global state-list */
36
- atomic_t count ; /* Reference count */
37
+ refcount_t count ; /* Reference count */
37
38
unsigned mmu_notifier_count ; /* Counting nested mmu_notifier
38
39
calls */
39
40
struct mm_struct * mm ; /* mm_struct for the faults */
@@ -242,7 +243,7 @@ static struct pasid_state *get_pasid_state(struct device_state *dev_state,
242
243
243
244
ret = * ptr ;
244
245
if (ret )
245
- atomic_inc (& ret -> count );
246
+ refcount_inc (& ret -> count );
246
247
247
248
out_unlock :
248
249
spin_unlock_irqrestore (& dev_state -> lock , flags );
@@ -257,14 +258,14 @@ static void free_pasid_state(struct pasid_state *pasid_state)
257
258
258
259
static void put_pasid_state (struct pasid_state * pasid_state )
259
260
{
260
- if (atomic_dec_and_test (& pasid_state -> count ))
261
+ if (refcount_dec_and_test (& pasid_state -> count ))
261
262
wake_up (& pasid_state -> wq );
262
263
}
263
264
264
265
static void put_pasid_state_wait (struct pasid_state * pasid_state )
265
266
{
266
- atomic_dec (& pasid_state -> count );
267
- wait_event (pasid_state -> wq , !atomic_read (& pasid_state -> count ));
267
+ refcount_dec (& pasid_state -> count );
268
+ wait_event (pasid_state -> wq , !refcount_read (& pasid_state -> count ));
268
269
free_pasid_state (pasid_state );
269
270
}
270
271
@@ -624,7 +625,7 @@ int amd_iommu_bind_pasid(struct pci_dev *pdev, u32 pasid,
624
625
goto out ;
625
626
626
627
627
- atomic_set (& pasid_state -> count , 1 );
628
+ refcount_set (& pasid_state -> count , 1 );
628
629
init_waitqueue_head (& pasid_state -> wq );
629
630
spin_lock_init (& pasid_state -> lock );
630
631
0 commit comments