Lines Matching refs:sa_bo
47 static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo);
80 struct amdgpu_sa_bo *sa_bo, *tmp; in amdgpu_sa_bo_manager_fini() local
89 list_for_each_entry_safe(sa_bo, tmp, &sa_manager->olist, olist) { in amdgpu_sa_bo_manager_fini()
90 amdgpu_sa_bo_remove_locked(sa_bo); in amdgpu_sa_bo_manager_fini()
142 static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo) in amdgpu_sa_bo_remove_locked() argument
144 struct amdgpu_sa_manager *sa_manager = sa_bo->manager; in amdgpu_sa_bo_remove_locked()
145 if (sa_manager->hole == &sa_bo->olist) { in amdgpu_sa_bo_remove_locked()
146 sa_manager->hole = sa_bo->olist.prev; in amdgpu_sa_bo_remove_locked()
148 list_del_init(&sa_bo->olist); in amdgpu_sa_bo_remove_locked()
149 list_del_init(&sa_bo->flist); in amdgpu_sa_bo_remove_locked()
150 fence_put(sa_bo->fence); in amdgpu_sa_bo_remove_locked()
151 kfree(sa_bo); in amdgpu_sa_bo_remove_locked()
156 struct amdgpu_sa_bo *sa_bo, *tmp; in amdgpu_sa_bo_try_free() local
161 sa_bo = list_entry(sa_manager->hole->next, struct amdgpu_sa_bo, olist); in amdgpu_sa_bo_try_free()
162 list_for_each_entry_safe_from(sa_bo, tmp, &sa_manager->olist, olist) { in amdgpu_sa_bo_try_free()
163 if (sa_bo->fence == NULL || in amdgpu_sa_bo_try_free()
164 !fence_is_signaled(sa_bo->fence)) { in amdgpu_sa_bo_try_free()
167 amdgpu_sa_bo_remove_locked(sa_bo); in amdgpu_sa_bo_try_free()
192 struct amdgpu_sa_bo *sa_bo, in amdgpu_sa_bo_try_alloc() argument
204 sa_bo->manager = sa_manager; in amdgpu_sa_bo_try_alloc()
205 sa_bo->soffset = soffset; in amdgpu_sa_bo_try_alloc()
206 sa_bo->eoffset = soffset + size; in amdgpu_sa_bo_try_alloc()
207 list_add(&sa_bo->olist, sa_manager->hole); in amdgpu_sa_bo_try_alloc()
208 INIT_LIST_HEAD(&sa_bo->flist); in amdgpu_sa_bo_try_alloc()
209 sa_manager->hole = &sa_bo->olist; in amdgpu_sa_bo_try_alloc()
269 struct amdgpu_sa_bo *sa_bo; in amdgpu_sa_bo_next_hole() local
275 sa_bo = list_first_entry(&sa_manager->flist[i], in amdgpu_sa_bo_next_hole()
278 if (!fence_is_signaled(sa_bo->fence)) { in amdgpu_sa_bo_next_hole()
279 fences[i] = sa_bo->fence; in amdgpu_sa_bo_next_hole()
288 tmp = sa_bo->soffset; in amdgpu_sa_bo_next_hole()
297 best_bo = sa_bo; in amdgpu_sa_bo_next_hole()
315 struct amdgpu_sa_bo **sa_bo, in amdgpu_sa_bo_new() argument
327 *sa_bo = kmalloc(sizeof(struct amdgpu_sa_bo), GFP_KERNEL); in amdgpu_sa_bo_new()
328 if ((*sa_bo) == NULL) { in amdgpu_sa_bo_new()
331 (*sa_bo)->manager = sa_manager; in amdgpu_sa_bo_new()
332 (*sa_bo)->fence = NULL; in amdgpu_sa_bo_new()
333 INIT_LIST_HEAD(&(*sa_bo)->olist); in amdgpu_sa_bo_new()
334 INIT_LIST_HEAD(&(*sa_bo)->flist); in amdgpu_sa_bo_new()
346 if (amdgpu_sa_bo_try_alloc(sa_manager, *sa_bo, in amdgpu_sa_bo_new()
379 kfree(*sa_bo); in amdgpu_sa_bo_new()
380 *sa_bo = NULL; in amdgpu_sa_bo_new()
384 void amdgpu_sa_bo_free(struct amdgpu_device *adev, struct amdgpu_sa_bo **sa_bo, in amdgpu_sa_bo_free() argument
389 if (sa_bo == NULL || *sa_bo == NULL) { in amdgpu_sa_bo_free()
393 sa_manager = (*sa_bo)->manager; in amdgpu_sa_bo_free()
397 (*sa_bo)->fence = fence_get(fence); in amdgpu_sa_bo_free()
399 list_add_tail(&(*sa_bo)->flist, &sa_manager->flist[idx]); in amdgpu_sa_bo_free()
401 amdgpu_sa_bo_remove_locked(*sa_bo); in amdgpu_sa_bo_free()
405 *sa_bo = NULL; in amdgpu_sa_bo_free()