101 unsigned long rb_parent_color;
106 } __attribute__((aligned(
sizeof(
long))));
115 #define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
116 #define rb_color(r) ((r)->rb_parent_color & 1)
117 #define rb_is_red(r) (!rb_color(r))
118 #define rb_is_black(r) rb_color(r)
119 #define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
120 #define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
122 static inline void rb_set_parent(
struct rb_node *rb,
struct rb_node *p)
124 rb->rb_parent_color = (rb->rb_parent_color & 3) | (
unsigned long)p;
126 static inline void rb_set_color(
struct rb_node *rb,
int color)
128 rb->rb_parent_color = (rb->rb_parent_color & ~1) | color;
131 #define RB_ROOT { NULL, }
132 #define rb_entry(ptr, type, member) container_of(ptr, type, member)
134 #define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
135 #define RB_EMPTY_NODE(node) (rb_parent(node) == node)
136 #define RB_CLEAR_NODE(node) (rb_set_parent(node, node))
148 extern void rb_replace_node(
struct rb_node *victim,
struct rb_node *_new,
151 static inline void rb_link_node(
struct rb_node * node,
struct rb_node * parent,
154 node->rb_parent_color = (
unsigned long )parent;
155 node->rb_left = node->rb_right = NULL;