@@ -150,60 +150,7 @@ static int amdgpu_gtt_mgr_fini(struct ttm_mem_type_manager *man)
150
150
*/
151
151
bool amdgpu_gtt_mgr_has_gart_addr (struct ttm_mem_reg * mem )
152
152
{
153
- struct amdgpu_gtt_node * node = mem -> mm_node ;
154
-
155
- return (node -> node .start != AMDGPU_BO_INVALID_OFFSET );
156
- }
157
-
158
- /**
159
- * amdgpu_gtt_mgr_alloc - allocate new ranges
160
- *
161
- * @man: TTM memory type manager
162
- * @tbo: TTM BO we need this range for
163
- * @place: placement flags and restrictions
164
- * @mem: the resulting mem object
165
- *
166
- * Allocate the address space for a node.
167
- */
168
- static int amdgpu_gtt_mgr_alloc (struct ttm_mem_type_manager * man ,
169
- struct ttm_buffer_object * tbo ,
170
- const struct ttm_place * place ,
171
- struct ttm_mem_reg * mem )
172
- {
173
- struct amdgpu_device * adev = amdgpu_ttm_adev (man -> bdev );
174
- struct amdgpu_gtt_mgr * mgr = man -> priv ;
175
- struct amdgpu_gtt_node * node = mem -> mm_node ;
176
- enum drm_mm_insert_mode mode ;
177
- unsigned long fpfn , lpfn ;
178
- int r ;
179
-
180
- if (amdgpu_gtt_mgr_has_gart_addr (mem ))
181
- return 0 ;
182
-
183
- if (place )
184
- fpfn = place -> fpfn ;
185
- else
186
- fpfn = 0 ;
187
-
188
- if (place && place -> lpfn )
189
- lpfn = place -> lpfn ;
190
- else
191
- lpfn = adev -> gart .num_cpu_pages ;
192
-
193
- mode = DRM_MM_INSERT_BEST ;
194
- if (place && place -> flags & TTM_PL_FLAG_TOPDOWN )
195
- mode = DRM_MM_INSERT_HIGH ;
196
-
197
- spin_lock (& mgr -> lock );
198
- r = drm_mm_insert_node_in_range (& mgr -> mm , & node -> node , mem -> num_pages ,
199
- mem -> page_alignment , 0 , fpfn , lpfn ,
200
- mode );
201
- spin_unlock (& mgr -> lock );
202
-
203
- if (!r )
204
- mem -> start = node -> node .start ;
205
-
206
- return r ;
153
+ return mem -> mm_node != NULL ;
207
154
}
208
155
209
156
/**
@@ -234,29 +181,37 @@ static int amdgpu_gtt_mgr_new(struct ttm_mem_type_manager *man,
234
181
atomic64_sub (mem -> num_pages , & mgr -> available );
235
182
spin_unlock (& mgr -> lock );
236
183
184
+ if (!place -> lpfn ) {
185
+ mem -> mm_node = NULL ;
186
+ mem -> start = AMDGPU_BO_INVALID_OFFSET ;
187
+ return 0 ;
188
+ }
189
+
237
190
node = kzalloc (sizeof (* node ), GFP_KERNEL );
238
191
if (!node ) {
239
192
r = - ENOMEM ;
240
193
goto err_out ;
241
194
}
242
195
243
- node -> node .start = AMDGPU_BO_INVALID_OFFSET ;
244
- node -> node .size = mem -> num_pages ;
245
196
node -> tbo = tbo ;
246
- mem -> mm_node = node ;
247
197
248
- if (place -> fpfn || place -> lpfn || place -> flags & TTM_PL_FLAG_TOPDOWN ) {
249
- r = amdgpu_gtt_mgr_alloc (man , tbo , place , mem );
250
- if (unlikely (r )) {
251
- kfree (node );
252
- mem -> mm_node = NULL ;
253
- goto err_out ;
254
- }
255
- } else {
256
- mem -> start = node -> node .start ;
257
- }
198
+ spin_lock (& mgr -> lock );
199
+ r = drm_mm_insert_node_in_range (& mgr -> mm , & node -> node , mem -> num_pages ,
200
+ mem -> page_alignment , 0 , place -> fpfn ,
201
+ place -> lpfn , DRM_MM_INSERT_BEST );
202
+ spin_unlock (& mgr -> lock );
203
+
204
+ if (unlikely (r ))
205
+ goto err_free ;
206
+
207
+ mem -> mm_node = node ;
208
+ mem -> start = node -> node .start ;
258
209
259
210
return 0 ;
211
+
212
+ err_free :
213
+ kfree (node );
214
+
260
215
err_out :
261
216
atomic64_add (mem -> num_pages , & mgr -> available );
262
217
@@ -279,17 +234,14 @@ static void amdgpu_gtt_mgr_del(struct ttm_mem_type_manager *man,
279
234
struct amdgpu_gtt_mgr * mgr = man -> priv ;
280
235
struct amdgpu_gtt_node * node = mem -> mm_node ;
281
236
282
- if (!node )
283
- return ;
284
-
285
- spin_lock (& mgr -> lock );
286
- if (node -> node .start != AMDGPU_BO_INVALID_OFFSET )
237
+ if (node ) {
238
+ spin_lock (& mgr -> lock );
287
239
drm_mm_remove_node (& node -> node );
288
- spin_unlock (& mgr -> lock );
289
- atomic64_add (mem -> num_pages , & mgr -> available );
240
+ spin_unlock (& mgr -> lock );
241
+ kfree (node );
242
+ }
290
243
291
- kfree (node );
292
- mem -> mm_node = NULL ;
244
+ atomic64_add (mem -> num_pages , & mgr -> available );
293
245
}
294
246
295
247
/**
0 commit comments