Lines Matching refs:head
24 struct freelist_node *head; member
46 struct freelist_node *head = READ_ONCE(list->head); in __freelist_add() local
49 WRITE_ONCE(node->next, head); in __freelist_add()
52 if (!try_cmpxchg_release(&list->head, &head, node)) { in __freelist_add()
81 struct freelist_node *prev, *next, *head = smp_load_acquire(&list->head); in freelist_try_get() local
84 while (head) { in freelist_try_get()
85 prev = head; in freelist_try_get()
86 refs = atomic_read(&head->refs); in freelist_try_get()
88 !atomic_try_cmpxchg_acquire(&head->refs, &refs, refs+1)) { in freelist_try_get()
89 head = smp_load_acquire(&list->head); in freelist_try_get()
98 next = READ_ONCE(head->next); in freelist_try_get()
99 if (try_cmpxchg_acquire(&list->head, &head, next)) { in freelist_try_get()
106 WARN_ON_ONCE(atomic_read(&head->refs) & REFS_ON_FREELIST); in freelist_try_get()
112 atomic_fetch_add(-2, &head->refs); in freelist_try_get()
114 return head; in freelist_try_get()