3 void __xlist_detach(struct xlist_node *node)
5 struct xlist_node *head, *tail;
6 head = XPTR(&node->head);
7 tail = XPTR(&node->tail);
9 XPTRSET(&head->tail, tail);
11 XPTRSET(&tail->head, head);
12 XPTRSET(&node->pool, NULL);
15 void __xlist_attach( struct xlist_node *head,
16 struct xlist_node *tail,
17 struct xlist_node *node )
19 struct xlist *list = XPTR(node->list);
20 xqindex nr = XPTRI(&list->node.list);
25 XPTRSET(&node->head, head);
26 XPTRSET(&node->tail, tail);
27 XPTRSET(&head->tail, node);
28 XPTRSET(&tail->head, node);
29 XPTRISET(&list->node.list, nr - 1);
32 xqindex xlist_add_head(struct xlist *list, struct xlist_node *node)
34 struct xlist_node *head;
35 xqindex nr = XPTRI(&list->node.list) + 1;
41 head = XPTR(&node->head);
42 __xlist_attach(head, &list->node, node);
44 XPTRISET(&list->node.list, nr);
49 xqindex xlist_add_tail(struct xlist *list, struct xlist_node *node)
51 struct xlist_node *tail;
52 xqindex nr = XPTRI(&list->node.list) + 1;
58 tail = XPTR(&node->tail);
59 __xlist_attach(&list->node, tail, node);
61 XPTRISET(&list->node.list, nr);
66 struct xlist *xlist_detach(struct xlist_node *node)
68 struct xlist *list = node->list;