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
94 list_for_each_entry_safe(sa_bo, tmp, &sa_manager->olist, olist) { in amdgpu_sa_bo_manager_fini()
95 amdgpu_sa_bo_remove_locked(sa_bo); in amdgpu_sa_bo_manager_fini()
102 static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo) in amdgpu_sa_bo_remove_locked() argument
104 struct amdgpu_sa_manager *sa_manager = sa_bo->manager; in amdgpu_sa_bo_remove_locked()
105 if (sa_manager->hole == &sa_bo->olist) { in amdgpu_sa_bo_remove_locked()
106 sa_manager->hole = sa_bo->olist.prev; in amdgpu_sa_bo_remove_locked()
108 list_del_init(&sa_bo->olist); in amdgpu_sa_bo_remove_locked()
109 list_del_init(&sa_bo->flist); in amdgpu_sa_bo_remove_locked()
110 dma_fence_put(sa_bo->fence); in amdgpu_sa_bo_remove_locked()
111 kfree(sa_bo); in amdgpu_sa_bo_remove_locked()
116 struct amdgpu_sa_bo *sa_bo, *tmp; in amdgpu_sa_bo_try_free() local
121 sa_bo = list_entry(sa_manager->hole->next, struct amdgpu_sa_bo, olist); in amdgpu_sa_bo_try_free()
122 list_for_each_entry_safe_from(sa_bo, tmp, &sa_manager->olist, olist) { in amdgpu_sa_bo_try_free()
123 if (sa_bo->fence == NULL || in amdgpu_sa_bo_try_free()
124 !dma_fence_is_signaled(sa_bo->fence)) { in amdgpu_sa_bo_try_free()
127 amdgpu_sa_bo_remove_locked(sa_bo); in amdgpu_sa_bo_try_free()
152 struct amdgpu_sa_bo *sa_bo, in amdgpu_sa_bo_try_alloc() argument
164 sa_bo->manager = sa_manager; in amdgpu_sa_bo_try_alloc()
165 sa_bo->soffset = soffset; in amdgpu_sa_bo_try_alloc()
166 sa_bo->eoffset = soffset + size; in amdgpu_sa_bo_try_alloc()
167 list_add(&sa_bo->olist, sa_manager->hole); in amdgpu_sa_bo_try_alloc()
168 INIT_LIST_HEAD(&sa_bo->flist); in amdgpu_sa_bo_try_alloc()
169 sa_manager->hole = &sa_bo->olist; in amdgpu_sa_bo_try_alloc()
227 struct amdgpu_sa_bo *sa_bo; in amdgpu_sa_bo_next_hole() local
234 sa_bo = list_first_entry(&sa_manager->flist[i], in amdgpu_sa_bo_next_hole()
237 if (!dma_fence_is_signaled(sa_bo->fence)) { in amdgpu_sa_bo_next_hole()
238 fences[i] = sa_bo->fence; in amdgpu_sa_bo_next_hole()
247 tmp = sa_bo->soffset; in amdgpu_sa_bo_next_hole()
256 best_bo = sa_bo; in amdgpu_sa_bo_next_hole()
276 struct amdgpu_sa_bo **sa_bo, in amdgpu_sa_bo_new() argument
291 *sa_bo = kmalloc(sizeof(struct amdgpu_sa_bo), GFP_KERNEL); in amdgpu_sa_bo_new()
292 if (!(*sa_bo)) in amdgpu_sa_bo_new()
294 (*sa_bo)->manager = sa_manager; in amdgpu_sa_bo_new()
295 (*sa_bo)->fence = NULL; in amdgpu_sa_bo_new()
296 INIT_LIST_HEAD(&(*sa_bo)->olist); in amdgpu_sa_bo_new()
297 INIT_LIST_HEAD(&(*sa_bo)->flist); in amdgpu_sa_bo_new()
307 if (amdgpu_sa_bo_try_alloc(sa_manager, *sa_bo, in amdgpu_sa_bo_new()
341 kfree(*sa_bo); in amdgpu_sa_bo_new()
342 *sa_bo = NULL; in amdgpu_sa_bo_new()
346 void amdgpu_sa_bo_free(struct amdgpu_device *adev, struct amdgpu_sa_bo **sa_bo, in amdgpu_sa_bo_free() argument
351 if (sa_bo == NULL || *sa_bo == NULL) { in amdgpu_sa_bo_free()
355 sa_manager = (*sa_bo)->manager; in amdgpu_sa_bo_free()
360 (*sa_bo)->fence = dma_fence_get(fence); in amdgpu_sa_bo_free()
362 list_add_tail(&(*sa_bo)->flist, &sa_manager->flist[idx]); in amdgpu_sa_bo_free()
364 amdgpu_sa_bo_remove_locked(*sa_bo); in amdgpu_sa_bo_free()
368 *sa_bo = NULL; in amdgpu_sa_bo_free()