36typedef struct list_entry
58#define LIST_FOR_EACH(elem, list, member) \
59 for ((elem) = CONTAINER_OF((list)->head.next, typeof(*elem), member); &(elem)->member != &((list)->head); \
60 (elem) = CONTAINER_OF((elem)->member.next, typeof(*elem), member))
73#define LIST_FOR_EACH_SAFE(elem, temp, list, member) \
74 for ((elem) = CONTAINER_OF((list)->head.next, typeof(*elem), member), \
75 (temp) = CONTAINER_OF((elem)->member.next, typeof(*elem), member); \
76 &(elem)->member != &((list)->head); \
77 (elem) = (temp), (temp) = CONTAINER_OF((elem)->member.next, typeof(*elem), member))
86#define LIST_FOR_EACH_REVERSE(elem, list, member) \
87 for ((elem) = CONTAINER_OF((list)->head.prev, typeof(*elem), member); &(elem)->member != &((list)->head); \
88 (elem) = CONTAINER_OF((elem)->member.prev, typeof(*elem), member))
100#define LIST_FOR_EACH_FROM(elem, start, list, member) \
101 for ((elem) = CONTAINER_OF(start, typeof(*elem), member); &(elem)->member != &((list)->head); \
102 (elem) = CONTAINER_OF((elem)->member.next, typeof(*elem), member))
112#define LIST_FOR_EACH_FROM_REVERSE(elem, start, list, member) \
113 for ((elem) = CONTAINER_OF(start, typeof(*elem), member); &(elem)->member != &((list)->head); \
114 (elem) = CONTAINER_OF((elem)->member.prev, typeof(*elem), member))
127#define LIST_FOR_EACH_TO(elem, end, list, member) \
128 for ((elem) = CONTAINER_OF((list)->head.next, typeof(*elem), member); \
129 &(elem)->member != &((list)->head) && &(elem)->member != (end); \
130 (elem) = CONTAINER_OF((elem)->member.next, typeof(*elem), member))
140#define LIST_FOR_EACH_TO_REVERSE(elem, end, list, member) \
141 for ((elem) = CONTAINER_OF((list)->head.prev, typeof(*elem), member); \
142 &(elem)->member != &((list)->head) && &(elem)->member != (end); \
143 (elem) = CONTAINER_OF((elem)->member.prev, typeof(*elem), member))
151#define LIST_ENTRY_CREATE(name) \
154 .prev = &(name), .next = &(name), \
163#define LIST_CREATE(name) \
165 .head = {.prev = &(name).head, .next = &(name).head } \
201 return entry->
next != entry && entry->
prev != entry;
482 while (entry != &list->
head)
#define assert(expression)
static void list_remove(list_entry_t *entry)
Removes a list entry from its current list.
static list_entry_t * list_next(list_t *list, list_entry_t *entry)
Gets the next entry in the list relative to a given entry.
static list_entry_t * list_first(list_t *list)
Gets the first entry in the list without removing it.
static list_entry_t * list_last(list_t *list)
Gets the last entry in the list without removing it.
static void list_push_back(list_t *list, list_entry_t *entry)
Pushes an entry to the end of the list.
static void list_prepend(list_entry_t *head, list_entry_t *entry)
Prepends an entry to the list.
static bool list_entry_in_list(list_entry_t *entry)
Check if an entry is in a list.
static void list_add_rcu(list_entry_t *prev, list_entry_t *next, list_entry_t *entry)
Adds a new element between two existing list entries in a RCU-safe manner.
static list_entry_t * list_prev(list_t *list, list_entry_t *entry)
Gets the previous entry in the list relative to a given entry.
static void list_append(list_entry_t *prev, list_entry_t *entry)
Appends an entry to the list.
static void list_remove_rcu(list_entry_t *entry)
Removes a list entry from its current list in a RCU-safe manner.
static bool list_is_empty(list_t *list)
Checks if a list is empty.
static uint64_t list_size(list_t *list)
Gets the size of the list.
static list_entry_t * list_pop_back(list_t *list)
Pops the last entry from the list.
static void list_entry_init(list_entry_t *entry)
Initializes a list entry.
static void list_push_back_rcu(list_t *list, list_entry_t *entry)
Pushes an entry to the end of the list in a RCU-safe manner.
static void list_add(list_entry_t *prev, list_entry_t *next, list_entry_t *entry)
Adds a new element between two existing list entries.
static void list_push_front(list_t *list, list_entry_t *entry)
Pushes an entry to the front of the list.
static list_entry_t * list_pop_front(list_t *list)
Pops the first entry from the list.
static void list_init(list_t *list)
Initializes a list.
#define NULL
Pointer error value.
#define atomic_thread_fence(order)
A entry in a doubly linked list.
struct list_entry * next
The next entry in the list.
struct list_entry * prev
The previous entry in the list.