Lines Matching refs:sa_bo
47 static void radeon_sa_bo_remove_locked(struct radeon_sa_bo *sa_bo);
80 struct radeon_sa_bo *sa_bo, *tmp; in radeon_sa_bo_manager_fini() local
89 list_for_each_entry_safe(sa_bo, tmp, &sa_manager->olist, olist) { in radeon_sa_bo_manager_fini()
90 radeon_sa_bo_remove_locked(sa_bo); in radeon_sa_bo_manager_fini()
142 static void radeon_sa_bo_remove_locked(struct radeon_sa_bo *sa_bo) in radeon_sa_bo_remove_locked() argument
144 struct radeon_sa_manager *sa_manager = sa_bo->manager; in radeon_sa_bo_remove_locked()
145 if (sa_manager->hole == &sa_bo->olist) { in radeon_sa_bo_remove_locked()
146 sa_manager->hole = sa_bo->olist.prev; in radeon_sa_bo_remove_locked()
148 list_del_init(&sa_bo->olist); in radeon_sa_bo_remove_locked()
149 list_del_init(&sa_bo->flist); in radeon_sa_bo_remove_locked()
150 radeon_fence_unref(&sa_bo->fence); in radeon_sa_bo_remove_locked()
151 kfree(sa_bo); in radeon_sa_bo_remove_locked()
156 struct radeon_sa_bo *sa_bo, *tmp; in radeon_sa_bo_try_free() local
161 sa_bo = list_entry(sa_manager->hole->next, struct radeon_sa_bo, olist); in radeon_sa_bo_try_free()
162 list_for_each_entry_safe_from(sa_bo, tmp, &sa_manager->olist, olist) { in radeon_sa_bo_try_free()
163 if (sa_bo->fence == NULL || !radeon_fence_signaled(sa_bo->fence)) { in radeon_sa_bo_try_free()
166 radeon_sa_bo_remove_locked(sa_bo); in radeon_sa_bo_try_free()
191 struct radeon_sa_bo *sa_bo, in radeon_sa_bo_try_alloc() argument
203 sa_bo->manager = sa_manager; in radeon_sa_bo_try_alloc()
204 sa_bo->soffset = soffset; in radeon_sa_bo_try_alloc()
205 sa_bo->eoffset = soffset + size; in radeon_sa_bo_try_alloc()
206 list_add(&sa_bo->olist, sa_manager->hole); in radeon_sa_bo_try_alloc()
207 INIT_LIST_HEAD(&sa_bo->flist); in radeon_sa_bo_try_alloc()
208 sa_manager->hole = &sa_bo->olist; in radeon_sa_bo_try_alloc()
268 struct radeon_sa_bo *sa_bo; in radeon_sa_bo_next_hole() local
274 sa_bo = list_first_entry(&sa_manager->flist[i], in radeon_sa_bo_next_hole()
277 if (!radeon_fence_signaled(sa_bo->fence)) { in radeon_sa_bo_next_hole()
278 fences[i] = sa_bo->fence; in radeon_sa_bo_next_hole()
287 tmp = sa_bo->soffset; in radeon_sa_bo_next_hole()
296 best_bo = sa_bo; in radeon_sa_bo_next_hole()
314 struct radeon_sa_bo **sa_bo, in radeon_sa_bo_new() argument
324 *sa_bo = kmalloc(sizeof(struct radeon_sa_bo), GFP_KERNEL); in radeon_sa_bo_new()
325 if ((*sa_bo) == NULL) { in radeon_sa_bo_new()
328 (*sa_bo)->manager = sa_manager; in radeon_sa_bo_new()
329 (*sa_bo)->fence = NULL; in radeon_sa_bo_new()
330 INIT_LIST_HEAD(&(*sa_bo)->olist); in radeon_sa_bo_new()
331 INIT_LIST_HEAD(&(*sa_bo)->flist); in radeon_sa_bo_new()
343 if (radeon_sa_bo_try_alloc(sa_manager, *sa_bo, in radeon_sa_bo_new()
371 kfree(*sa_bo); in radeon_sa_bo_new()
372 *sa_bo = NULL; in radeon_sa_bo_new()
376 void radeon_sa_bo_free(struct radeon_device *rdev, struct radeon_sa_bo **sa_bo, in radeon_sa_bo_free() argument
381 if (sa_bo == NULL || *sa_bo == NULL) { in radeon_sa_bo_free()
385 sa_manager = (*sa_bo)->manager; in radeon_sa_bo_free()
388 (*sa_bo)->fence = radeon_fence_ref(fence); in radeon_sa_bo_free()
389 list_add_tail(&(*sa_bo)->flist, in radeon_sa_bo_free()
392 radeon_sa_bo_remove_locked(*sa_bo); in radeon_sa_bo_free()
396 *sa_bo = NULL; in radeon_sa_bo_free()