This source file includes following definitions.
- kfd_set_pasid_limit
- kfd_get_pasid_limit
- kfd_pasid_alloc
- kfd_pasid_free
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <linux/types.h>
24 #include "kfd_priv.h"
25 #include "amdgpu_ids.h"
26
27 static unsigned int pasid_bits = 16;
28 static const struct kfd2kgd_calls *kfd2kgd;
29
30 bool kfd_set_pasid_limit(unsigned int new_limit)
31 {
32 if (new_limit < 2)
33 return false;
34
35 if (new_limit < (1U << pasid_bits)) {
36 if (kfd2kgd)
37
38
39
40 return false;
41
42 while (new_limit < (1U << pasid_bits))
43 pasid_bits--;
44 }
45
46 return true;
47 }
48
49 unsigned int kfd_get_pasid_limit(void)
50 {
51 return 1U << pasid_bits;
52 }
53
54 unsigned int kfd_pasid_alloc(void)
55 {
56 int r;
57
58
59 if (!kfd2kgd) {
60 struct kfd_dev *dev = NULL;
61 unsigned int i = 0;
62
63 while ((kfd_topology_enum_kfd_devices(i, &dev)) == 0) {
64 if (dev && dev->kfd2kgd) {
65 kfd2kgd = dev->kfd2kgd;
66 break;
67 }
68 i++;
69 }
70
71 if (!kfd2kgd)
72 return false;
73 }
74
75 r = amdgpu_pasid_alloc(pasid_bits);
76
77 return r > 0 ? r : 0;
78 }
79
80 void kfd_pasid_free(unsigned int pasid)
81 {
82 if (kfd2kgd)
83 amdgpu_pasid_free(pasid);
84 }