Lines Matching refs:fl
218 util_sparse_array_free_list_init(struct util_sparse_array_free_list *fl,
223 fl->head = sentinel;
224 fl->arr = arr;
225 fl->sentinel = sentinel;
226 fl->next_offset = next_offset;
236 util_sparse_array_free_list_push(struct util_sparse_array_free_list *fl,
240 assert(items[0] != fl->sentinel);
241 void *last_elem = util_sparse_array_get(fl->arr, items[0]);
242 uint32_t *last_next = (uint32_t *)((char *)last_elem + fl->next_offset);
245 assert(items[i] != fl->sentinel);
246 last_elem = util_sparse_array_get(fl->arr, items[i]);
247 last_next = (uint32_t *)((char *)last_elem + fl->next_offset);
251 old_head = p_atomic_read(&fl->head);
256 old_head = p_atomic_cmpxchg(&fl->head, current_head, new_head);
261 util_sparse_array_free_list_pop_idx(struct util_sparse_array_free_list *fl)
265 current_head = p_atomic_read(&fl->head);
267 if ((uint32_t)current_head == fl->sentinel)
268 return fl->sentinel;
271 void *head_elem = util_sparse_array_get(fl->arr, head_idx);
272 uint32_t *head_next = (uint32_t *)((char *)head_elem + fl->next_offset);
274 uint64_t old_head = p_atomic_cmpxchg(&fl->head, current_head, new_head);
282 util_sparse_array_free_list_pop_elem(struct util_sparse_array_free_list *fl)
286 current_head = p_atomic_read(&fl->head);
288 if ((uint32_t)current_head == fl->sentinel)
292 void *head_elem = util_sparse_array_get(fl->arr, head_idx);
293 uint32_t *head_next = (uint32_t *)((char *)head_elem + fl->next_offset);
295 uint64_t old_head = p_atomic_cmpxchg(&fl->head, current_head, new_head);