libosmocore 1.11.0.30-c17053.202507072026
Osmocom core library
|
Simple doubly linked list implementation. More...
#include <stddef.h>
#include <stdbool.h>
Go to the source code of this file.
Data Structures | |
struct | llist_head |
(double) linked list header structure More... | |
struct | hlist_head |
Double linked lists with a single pointer list head. More... | |
struct | hlist_node |
Macros | |
#define | inline __inline__ |
#define | container_of(ptr, type, member) |
Cast a member of a structure out to the containing structure. | |
#define | LLIST_POISON1 ((void *) 0x00100100) |
These are non-NULL pointers that will result in page faults under normal circumstances, used to verify that nobody uses non-initialized llist entries. | |
#define | LLIST_POISON2 ((void *) 0x00200200) |
#define | LLIST_HEAD_INIT(name) { &(name), &(name) } |
Define a new llist_head pointing to a given llist_head. | |
#define | LLIST_HEAD(name) struct llist_head name = LLIST_HEAD_INIT(name) |
Define a statically-initialized variable of type llist_head. | |
#define | INIT_LLIST_HEAD(ptr) |
Initialize a llist_head to point back to itself. | |
#define | llist_entry(ptr, type, member) container_of(ptr, type, member) |
Get the struct containing this list entry. | |
#define | llist_first_entry(ptr, type, member) llist_entry((ptr)->next, type, member) |
Get the first element from a linked list. | |
#define | llist_last_entry(ptr, type, member) llist_entry((ptr)->prev, type, member) |
Get the last element from a list. | |
#define | llist_last(head) (head)->prev |
Return the last element of the list. | |
#define | llist_first_entry_or_null(ptr, type, member) (!llist_empty(ptr) ? llist_first_entry(ptr, type, member) : NULL) |
Get the first element from a list, or NULL. | |
#define | llist_for_each(pos, head) |
Iterate over a linked list. | |
#define | __llist_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next) |
Iterate over a linked list (no prefetch). | |
#define | llist_for_each_prev(pos, head) |
Iterate over a linked list backwards. | |
#define | llist_for_each_safe(pos, n, head) |
Iterate over a linked list, safe against removal of llist entry. | |
#define | llist_for_each_entry(pos, head, member) |
Iterate over a linked list of a given type. | |
#define | llist_for_each_entry_reverse(pos, head, member) |
Iterate backwards over a linked list of a given type. | |
#define | llist_for_each_entry_continue(pos, head, member) |
Iterate over a linked list of a given type, continuing after an existing point. | |
#define | llist_for_each_entry_safe(pos, n, head, member) |
Iterate over llist of given type, safe against removal of llist entry. | |
#define | llist_for_each_rcu(pos, head) |
Iterate over an rcu-protected llist. | |
#define | __llist_for_each_rcu(pos, head) |
#define | llist_for_each_safe_rcu(pos, n, head) |
Iterate over an rcu-protected llist, safe against removal of llist entry. | |
#define | llist_for_each_entry_rcu(pos, head, member) |
Iterate over an rcu-protected llist of a given type. | |
#define | llist_for_each_continue_rcu(pos, head) |
Iterate over an rcu-protected llist, continuing after existing point. | |
#define | HLIST_HEAD_INIT { .first = NULL } |
#define | HLIST_HEAD(name) struct hlist_head name = { .first = NULL } |
#define | INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL) |
#define | READ_ONCE(x) x |
#define | WRITE_ONCE(a, b) a = b |
#define | hlist_entry(ptr, type, member) container_of(ptr,type,member) |
#define | hlist_for_each(pos, head) for (pos = (head)->first; pos ; pos = pos->next) |
#define | hlist_for_each_safe(pos, n, head) |
#define | hlist_entry_safe(ptr, type, member) |
#define | hlist_for_each_entry(pos, head, member) |
iterate over list of given type. | |
#define | hlist_for_each_entry_continue(pos, member) |
iterate over a hlist continuing after current point. | |
#define | hlist_for_each_entry_from(pos, member) |
iterate over a hlist continuing from current point. | |
#define | hlist_for_each_entry_safe(pos, n, head, member) |
hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry. | |
Simple doubly linked list implementation.
Some of the internal functions ("__xxx") are useful when manipulating whole llists rather than single entries, as sometimes we already know the next/prev entries and we can generate better code by using them directly rather than using the generic single-entry routines.