hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/drivers/gpu/drm/amd/amdkfd/kfd_pasid.c
....@@ -22,9 +22,10 @@
2222
2323 #include <linux/types.h>
2424 #include "kfd_priv.h"
25
+#include "amdgpu_ids.h"
2526
2627 static unsigned int pasid_bits = 16;
27
-static const struct kfd2kgd_calls *kfd2kgd;
28
+static bool pasids_allocated; /* = false */
2829
2930 bool kfd_set_pasid_limit(unsigned int new_limit)
3031 {
....@@ -32,7 +33,7 @@
3233 return false;
3334
3435 if (new_limit < (1U << pasid_bits)) {
35
- if (kfd2kgd)
36
+ if (pasids_allocated)
3637 /* We've already allocated user PASIDs, too late to
3738 * change the limit
3839 */
....@@ -50,34 +51,19 @@
5051 return 1U << pasid_bits;
5152 }
5253
53
-unsigned int kfd_pasid_alloc(void)
54
+u32 kfd_pasid_alloc(void)
5455 {
55
- int r;
56
+ int r = amdgpu_pasid_alloc(pasid_bits);
5657
57
- /* Find the first best KFD device for calling KGD */
58
- if (!kfd2kgd) {
59
- struct kfd_dev *dev = NULL;
60
- unsigned int i = 0;
61
-
62
- while ((kfd_topology_enum_kfd_devices(i, &dev)) == 0) {
63
- if (dev && dev->kfd2kgd) {
64
- kfd2kgd = dev->kfd2kgd;
65
- break;
66
- }
67
- i++;
68
- }
69
-
70
- if (!kfd2kgd)
71
- return false;
58
+ if (r > 0) {
59
+ pasids_allocated = true;
60
+ return r;
7261 }
7362
74
- r = kfd2kgd->alloc_pasid(pasid_bits);
75
-
76
- return r > 0 ? r : 0;
63
+ return 0;
7764 }
7865
79
-void kfd_pasid_free(unsigned int pasid)
66
+void kfd_pasid_free(u32 pasid)
8067 {
81
- if (kfd2kgd)
82
- kfd2kgd->free_pasid(pasid);
68
+ amdgpu_pasid_free(pasid);
8369 }