Skip to content

Locked list

include/structures/locked_list.h View source View on GitHub

Doubly linked list with a lock and counter for elements

struct locked_list (4 fields) source
§ struct spinlock lock
§ struct list_head list
§ size_t num_elems : 63
§ bool lock_high : 1
enum irql locked_list_lock(struct locked_list *ll)
source
void locked_list_unlock(struct locked_list *ll, enum irql irql)
source
bool locked_list_empty(struct locked_list *ll)
source
void locked_list_add(struct locked_list *ll, struct list_node *lh)
source
void locked_list_del(struct locked_list *ll, struct list_node *lh)
source
void locked_list_del_locked(
    struct locked_list *ll,
    struct list_node *lh
)
source
struct list_node * locked_list_pop_front(struct locked_list *ll)
source
size_t locked_list_num_elems(struct locked_list *ll)
source
void locked_list_init(struct locked_list *ll, bool irq_disable)
source
#define LOCKED_LIST_INIT(ll, irq_disable)
source
Expansion
#define LOCKED_LIST_INIT(ll, irq_disable) \
    (struct locked_list) { \
        .list = LIST_HEAD_INIT(ll.list), .lock = SPINLOCK_INIT, \
        .num_elems = ATOMIC_VAR_INIT(0), .lock_high = irq_disable \
    }
#define LOCKED_LIST_DEFINE(name, irq_disable)
source
Expansion
#define LOCKED_LIST_DEFINE(name, irq_disable) \
    struct locked_list name = LOCKED_LIST_INIT(name, irq_disable)
#define LOCKED_LIST_INIT_IRQ_DISABLE true
source
#define LOCKED_LIST_INIT_NORMAL false
source
#define LOCKED_LIST_DO(ll, action)
source
Expansion
#define LOCKED_LIST_DO(ll, action) \
    enum irql __macro_irql = locked_list_lock(ll); \
    action; \
    locked_list_unlock(ll, __macro_irql);