aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/5166-drm-amdgpu-Remove-VM-based-compute-profile-switching.patch
blob: f81cdbce8a1aea281fef5c97fcc4280af44292f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
From 72f96f62e18f8bec73fb67e735f5fb7ed00211c3 Mon Sep 17 00:00:00 2001
From: Felix Kuehling <Felix.Kuehling@amd.com>
Date: Sun, 15 Jul 2018 00:57:02 -0400
Subject: [PATCH 5166/5725] drm/amdgpu: Remove VM-based compute profile
 switching

VM-based compute profile switching was rejected upstream. It was
replaced with queue-based switching and a dedicated kfd2kgd interface.

Change-Id: I7c319bfe2533b29d8e5199dc2fc8fb001bbffdfd
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>

Conflicts:
      drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
      drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |  9 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c           | 53 ------------------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h           |  6 ---
 3 files changed, 5 insertions(+), 63 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 59e1f44..fb22f77 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1094,6 +1094,10 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
 	struct amdgpu_vm *avm = &drv_priv->vm;
 	int ret;
 
+	/* Already a compute VM? */
+	if (avm->process_info)
+		return -EINVAL;
+
 	/* Convert VM into a compute VM */
 	ret = amdgpu_vm_make_compute(adev, avm);
 	if (ret)
@@ -1115,7 +1119,7 @@ void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
 	struct amdkfd_process_info *process_info = vm->process_info;
 	struct amdgpu_bo *pd = vm->root.base.bo;
 
-	if (vm->vm_context != AMDGPU_VM_CONTEXT_COMPUTE)
+	if (!process_info)
 		return;
 
 	/* Release eviction fence from PD */
@@ -1123,9 +1127,6 @@ void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
 	amdgpu_bo_fence(pd, NULL, false);
 	amdgpu_bo_unreserve(pd);
 
-	if (!process_info)
-		return;
-
 	/* Update process info */
 	mutex_lock(&process_info->lock);
 	process_info->n_vms--;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 5de844d..deaef9f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -2561,24 +2561,6 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size,
 		 adev->vm_manager.fragment_size);
 }
 
-static void amdgpu_inc_compute_vms(struct amdgpu_device *adev)
-{
-	/* Temporary use only the first VM manager */
-	unsigned int vmhub = 0; /*ring->funcs->vmhub;*/
-	struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub];
-
-	mutex_lock(&id_mgr->lock);
-	if ((adev->vm_manager.n_compute_vms++ == 0) &&
-	    (!amdgpu_sriov_vf(adev))) {
-		/* First Compute VM: enable compute power profile */
-		if (adev->powerplay.pp_funcs &&
-			adev->powerplay.pp_funcs->switch_power_profile)
-			amdgpu_dpm_switch_power_profile(adev,
-							PP_SMC_POWER_PROFILE_COMPUTE, true);
-	}
-	mutex_unlock(&id_mgr->lock);
-}
-
 /**
  * amdgpu_vm_init - initialize a vm instance
  *
@@ -2691,11 +2673,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 	INIT_KFIFO(vm->faults);
 	vm->fault_credit = 16;
 	
-	vm->vm_context = vm_context;
-	
-	if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE)
-		amdgpu_inc_compute_vms(adev);
-
 	return 0;
 
 error_unreserve:
@@ -2722,7 +2699,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
  * page tables allocated yet.
  *
  * Changes the following VM parameters:
- * - vm_context
  * - use_cpu_for_update
  * - pte_supports_ats
  * - pasid (old PASID is released, because compute manages its own PASIDs)
@@ -2744,13 +2720,6 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 		return r;
 
 	/* Sanity checks */
-	if (vm->vm_context == AMDGPU_VM_CONTEXT_COMPUTE) {
-		/* Can happen if ioctl is interrupted by a signal after
-		 * this function already completed. Just return success.
-		 */
-		r = 0;
-		goto error;
-	}
 	if (!RB_EMPTY_ROOT(&vm->va.rb_root) || vm->root.entries) {
 		r = -EINVAL;
 		goto error;
@@ -2768,7 +2737,6 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 	}
 
 	/* Update VM state */
-	vm->vm_context = AMDGPU_VM_CONTEXT_COMPUTE;
 	vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
 				    AMDGPU_VM_USE_CPU_FOR_COMPUTE);
 	vm->pte_support_ats = pte_support_ats;
@@ -2787,8 +2755,6 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 		vm->pasid = 0;
 	}
 
-	/* Count the new compute VM */
-	amdgpu_inc_compute_vms(adev);
 	/* Free the shadow bo for compute VM */
 	amdgpu_bo_unref(&vm->root.base.bo->shadow);
 
@@ -2858,24 +2824,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 		spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
 	}
 
-	if (vm->vm_context == AMDGPU_VM_CONTEXT_COMPUTE) {
-		struct amdgpu_vmid_mgr *id_mgr =
-			&adev->vm_manager.id_mgr[AMDGPU_GFXHUB];
-		mutex_lock(&id_mgr->lock);
-
-		WARN(adev->vm_manager.n_compute_vms == 0, "Unbalanced number of Compute VMs");
-
-		if ((--adev->vm_manager.n_compute_vms == 0) &&
-			(!amdgpu_sriov_vf(adev))) {
-			/* Last KFD VM: enable graphics power profile */
-			if (adev->powerplay.pp_funcs &&
-				adev->powerplay.pp_funcs->switch_power_profile)
-				amdgpu_dpm_switch_power_profile(adev,
-					PP_SMC_POWER_PROFILE_COMPUTE, false);
-		}
-		mutex_unlock(&id_mgr->lock);
-	}
-
 	drm_sched_entity_fini(vm->entity.sched, &vm->entity);
 
 	if (!RB_EMPTY_ROOT(&vm->va.rb_root)) {
@@ -2986,7 +2934,6 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev)
 
 	idr_init(&adev->vm_manager.pasid_idr);
 	spin_lock_init(&adev->vm_manager.pasid_lock);
-	adev->vm_manager.n_compute_vms = 0;
 }
 
 /**
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
index b96bfed..3461300 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
@@ -236,9 +236,6 @@ struct amdgpu_vm {
 	/* Limit non-retry fault storms */
 	unsigned int		fault_credit;
 
-	/* Whether this is a Compute or GFX Context */
-	int			vm_context;
-
 	/* Points to the KFD process VM info */
 	struct amdkfd_process_info *process_info;
 
@@ -288,9 +285,6 @@ struct amdgpu_vm_manager {
 	 */
 	struct idr				pasid_idr;
 	spinlock_t				pasid_lock;
-
-	/* Number of Compute VMs, used for detecting Compute activity */
-	unsigned                                n_compute_vms;
 };
 
 #define amdgpu_vm_copy_pte(adev, ib, pe, src, count) ((adev)->vm_manager.vm_pte_funcs->copy_pte((ib), (pe), (src), (count)))
-- 
2.7.4