2#ifndef _LINUX_LIST_NULLS_H
3#define _LINUX_LIST_NULLS_H
28#define NULLS_MARKER(value) (1UL | (((long)value) << 1))
29#define INIT_HLIST_NULLS_HEAD(ptr, nulls) \
30 ((ptr)->first = (struct hlist_nulls_node *) NULLS_MARKER(nulls))
31#define HLIST_NULLS_HEAD_INIT(nulls) {.first = (struct hlist_nulls_node *)NULLS_MARKER(nulls)}
33#define hlist_nulls_entry(ptr, type, member) container_of(ptr,type,member)
35#define hlist_nulls_entry_safe(ptr, type, member) \
36 ({ typeof(ptr) ____ptr = (ptr); \
37 !is_a_nulls(____ptr) ? hlist_nulls_entry(____ptr, type, member) : NULL; \
46 return ((
unsigned long)ptr & 1);
55static inline unsigned long get_nulls_value(
const struct hlist_nulls_node *ptr)
57 return ((
unsigned long)ptr) >> 1;
100 if (!is_a_nulls(first))
110 if (!is_a_nulls(
next))
116 __hlist_nulls_del(n);
128#define hlist_nulls_for_each_entry(tpos, pos, head, member) \
129 for (pos = (head)->first; \
130 (!is_a_nulls(pos)) && \
131 ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1;}); \
141#define hlist_nulls_for_each_entry_from(tpos, pos, member) \
142 for (; (!is_a_nulls(pos)) && \
143 ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1;}); \
int h
Definition layout.c:118
#define READ_ONCE(x)
Definition kernel.h:605
#define WRITE_ONCE(x, val)
Definition kernel.h:608
#define LIST_POISON2
Definition poison.h:24
Definition list_nulls.h:21
struct hlist_nulls_node * first
Definition list_nulls.h:22
Definition list_nulls.h:25
struct hlist_nulls_node ** pprev
Definition list_nulls.h:26
struct hlist_nulls_node * next
Definition list_nulls.h:26