linux/include/linux/list.h
<<
>>
Prefs
   1#ifndef _LINUX_LIST_H
   2#define _LINUX_LIST_H
   3
   4#include <linux/types.h>
   5#include <linux/stddef.h>
   6#include <linux/poison.h>
   7#include <linux/const.h>
   8#include <linux/kernel.h>
   9
  10/*
  11 * Simple doubly linked list implementation.
  12 *
  13 * Some of the internal functions ("__xxx") are useful when
  14 * manipulating whole lists rather than single entries, as
  15 * sometimes we already know the next/prev entries and we can
  16 * generate better code by using them directly rather than
  17 * using the generic single-entry routines.
  18 */
  19
  20#define LIST_HEAD_INIT(name) { &(name), &(name) }
  21
  22#define LIST_HEAD(name) \
  23        struct list_head name = LIST_HEAD_INIT(name)
  24
  25static inline void INIT_LIST_HEAD(struct list_head *list)
  26{
  27        WRITE_ONCE(list->next, list);
  28        list->prev = list;
  29}
  30
  31/*
  32 * Insert a new entry between two known consecutive entries.
  33 *
  34 * This is only for internal list manipulation where we know
  35 * the prev/next entries already!
  36 */
  37#ifndef CONFIG_DEBUG_LIST
  38static inline void __list_add(struct list_head *new,
  39                              struct list_head *prev,
  40                              struct list_head *next)
  41{
  42        next->prev = new;
  43        new->next = next;
  44        new->prev = prev;
  45        WRITE_ONCE(prev->next, new);
  46}
  47#else
  48extern void __list_add(struct list_head *new,
  49                              struct list_head *prev,
  50                              struct list_head *next);
  51#endif
  52
  53/**
  54 * list_add - add a new entry
  55 * @new: new entry to be added
  56 * @head: list head to add it after
  57 *
  58 * Insert a new entry after the specified head.
  59 * This is good for implementing stacks.
  60 */
  61static inline void list_add(struct list_head *new, struct list_head *head)
  62{
  63        __list_add(new, head, head->next);
  64}
  65
  66
  67/**
  68 * list_add_tail - add a new entry
  69 * @new: new entry to be added
  70 * @head: list head to add it before
  71 *
  72 * Insert a new entry before the specified head.
  73 * This is useful for implementing queues.
  74 */
  75static inline void list_add_tail(struct list_head *new, struct list_head *head)
  76{
  77        __list_add(new, head->prev, head);
  78}
  79
  80/*
  81 * Delete a list entry by making the prev/next entries
  82 * point to each other.
  83 *
  84 * This is only for internal list manipulation where we know
  85 * the prev/next entries already!
  86 */
  87static inline void __list_del(struct list_head * prev, struct list_head * next)
  88{
  89        next->prev = prev;
  90        WRITE_ONCE(prev->next, next);
  91}
  92
  93/**
  94 * list_del - deletes entry from list.
  95 * @entry: the element to delete from the list.
  96 * Note: list_empty() on entry does not return true after this, the entry is
  97 * in an undefined state.
  98 */
  99#ifndef CONFIG_DEBUG_LIST
 100static inline void __list_del_entry(struct list_head *entry)
 101{
 102        __list_del(entry->prev, entry->next);
 103}
 104
 105static inline void list_del(struct list_head *entry)
 106{
 107        __list_del(entry->prev, entry->next);
 108        entry->next = LIST_POISON1;
 109        entry->prev = LIST_POISON2;
 110}
 111#else
 112extern void __list_del_entry(struct list_head *entry);
 113extern void list_del(struct list_head *entry);
 114#endif
 115
 116/**
 117 * list_replace - replace old entry by new one
 118 * @old : the element to be replaced
 119 * @new : the new element to insert
 120 *
 121 * If @old was empty, it will be overwritten.
 122 */
 123static inline void list_replace(struct list_head *old,
 124                                struct list_head *new)
 125{
 126        new->next = old->next;
 127        new->next->prev = new;
 128        new->prev = old->prev;
 129        new->prev->next = new;
 130}
 131
 132static inline void list_replace_init(struct list_head *old,
 133                                        struct list_head *new)
 134{
 135        list_replace(old, new);
 136        INIT_LIST_HEAD(old);
 137}
 138
 139/**
 140 * list_del_init - deletes entry from list and reinitialize it.
 141 * @entry: the element to delete from the list.
 142 */
 143static inline void list_del_init(struct list_head *entry)
 144{
 145        __list_del_entry(entry);
 146        INIT_LIST_HEAD(entry);
 147}
 148
 149/**
 150 * list_move - delete from one list and add as another's head
 151 * @list: the entry to move
 152 * @head: the head that will precede our entry
 153 */
 154static inline void list_move(struct list_head *list, struct list_head *head)
 155{
 156        __list_del_entry(list);
 157        list_add(list, head);
 158}
 159
 160/**
 161 * list_move_tail - delete from one list and add as another's tail
 162 * @list: the entry to move
 163 * @head: the head that will follow our entry
 164 */
 165static inline void list_move_tail(struct list_head *list,
 166                                  struct list_head *head)
 167{
 168        __list_del_entry(list);
 169        list_add_tail(list, head);
 170}
 171
 172/**
 173 * list_is_last - tests whether @list is the last entry in list @head
 174 * @list: the entry to test
 175 * @head: the head of the list
 176 */
 177static inline int list_is_last(const struct list_head *list,
 178                                const struct list_head *head)
 179{
 180        return list->next == head;
 181}
 182
 183/**
 184 * list_empty - tests whether a list is empty
 185 * @head: the list to test.
 186 */
 187static inline int list_empty(const struct list_head *head)
 188{
 189        return READ_ONCE(head->next) == head;
 190}
 191
 192/**
 193 * list_empty_careful - tests whether a list is empty and not being modified
 194 * @head: the list to test
 195 *
 196 * Description:
 197 * tests whether a list is empty _and_ checks that no other CPU might be
 198 * in the process of modifying either member (next or prev)
 199 *
 200 * NOTE: using list_empty_careful() without synchronization
 201 * can only be safe if the only activity that can happen
 202 * to the list entry is list_del_init(). Eg. it cannot be used
 203 * if another CPU could re-list_add() it.
 204 */
 205static inline int list_empty_careful(const struct list_head *head)
 206{
 207        struct list_head *next = head->next;
 208        return (next == head) && (next == head->prev);
 209}
 210
 211/**
 212 * list_rotate_left - rotate the list to the left
 213 * @head: the head of the list
 214 */
 215static inline void list_rotate_left(struct list_head *head)
 216{
 217        struct list_head *first;
 218
 219        if (!list_empty(head)) {
 220                first = head->next;
 221                list_move_tail(first, head);
 222        }
 223}
 224
 225/**
 226 * list_is_singular - tests whether a list has just one entry.
 227 * @head: the list to test.
 228 */
 229static inline int list_is_singular(const struct list_head *head)
 230{
 231        return !list_empty(head) && (head->next == head->prev);
 232}
 233
 234static inline void __list_cut_position(struct list_head *list,
 235                struct list_head *head, struct list_head *entry)
 236{
 237        struct list_head *new_first = entry->next;
 238        list->next = head->next;
 239        list->next->prev = list;
 240        list->prev = entry;
 241        entry->next = list;
 242        head->next = new_first;
 243        new_first->prev = head;
 244}
 245
 246/**
 247 * list_cut_position - cut a list into two
 248 * @list: a new list to add all removed entries
 249 * @head: a list with entries
 250 * @entry: an entry within head, could be the head itself
 251 *      and if so we won't cut the list
 252 *
 253 * This helper moves the initial part of @head, up to and
 254 * including @entry, from @head to @list. You should
 255 * pass on @entry an element you know is on @head. @list
 256 * should be an empty list or a list you do not care about
 257 * losing its data.
 258 *
 259 */
 260static inline void list_cut_position(struct list_head *list,
 261                struct list_head *head, struct list_head *entry)
 262{
 263        if (list_empty(head))
 264                return;
 265        if (list_is_singular(head) &&
 266                (head->next != entry && head != entry))
 267                return;
 268        if (entry == head)
 269                INIT_LIST_HEAD(list);
 270        else
 271                __list_cut_position(list, head, entry);
 272}
 273
 274static inline void __list_splice(const struct list_head *list,
 275                                 struct list_head *prev,
 276                                 struct list_head *next)
 277{
 278        struct list_head *first = list->next;
 279        struct list_head *last = list->prev;
 280
 281        first->prev = prev;
 282        prev->next = first;
 283
 284        last->next = next;
 285        next->prev = last;
 286}
 287
 288/**
 289 * list_splice - join two lists, this is designed for stacks
 290 * @list: the new list to add.
 291 * @head: the place to add it in the first list.
 292 */
 293static inline void list_splice(const struct list_head *list,
 294                                struct list_head *head)
 295{
 296        if (!list_empty(list))
 297                __list_splice(list, head, head->next);
 298}
 299
 300/**
 301 * list_splice_tail - join two lists, each list being a queue
 302 * @list: the new list to add.
 303 * @head: the place to add it in the first list.
 304 */
 305static inline void list_splice_tail(struct list_head *list,
 306                                struct list_head *head)
 307{
 308        if (!list_empty(list))
 309                __list_splice(list, head->prev, head);
 310}
 311
 312/**
 313 * list_splice_init - join two lists and reinitialise the emptied list.
 314 * @list: the new list to add.
 315 * @head: the place to add it in the first list.
 316 *
 317 * The list at @list is reinitialised
 318 */
 319static inline void list_splice_init(struct list_head *list,
 320                                    struct list_head *head)
 321{
 322        if (!list_empty(list)) {
 323                __list_splice(list, head, head->next);
 324                INIT_LIST_HEAD(list);
 325        }
 326}
 327
 328/**
 329 * list_splice_tail_init - join two lists and reinitialise the emptied list
 330 * @list: the new list to add.
 331 * @head: the place to add it in the first list.
 332 *
 333 * Each of the lists is a queue.
 334 * The list at @list is reinitialised
 335 */
 336static inline void list_splice_tail_init(struct list_head *list,
 337                                         struct list_head *head)
 338{
 339        if (!list_empty(list)) {
 340                __list_splice(list, head->prev, head);
 341                INIT_LIST_HEAD(list);
 342        }
 343}
 344
 345/**
 346 * list_entry - get the struct for this entry
 347 * @ptr:        the &struct list_head pointer.
 348 * @type:       the type of the struct this is embedded in.
 349 * @member:     the name of the list_head within the struct.
 350 */
 351#define list_entry(ptr, type, member) \
 352        container_of(ptr, type, member)
 353
 354/**
 355 * list_first_entry - get the first element from a list
 356 * @ptr:        the list head to take the element from.
 357 * @type:       the type of the struct this is embedded in.
 358 * @member:     the name of the list_head within the struct.
 359 *
 360 * Note, that list is expected to be not empty.
 361 */
 362#define list_first_entry(ptr, type, member) \
 363        list_entry((ptr)->next, type, member)
 364
 365/**
 366 * list_last_entry - get the last element from a list
 367 * @ptr:        the list head to take the element from.
 368 * @type:       the type of the struct this is embedded in.
 369 * @member:     the name of the list_head within the struct.
 370 *
 371 * Note, that list is expected to be not empty.
 372 */
 373#define list_last_entry(ptr, type, member) \
 374        list_entry((ptr)->prev, type, member)
 375
 376/**
 377 * list_first_entry_or_null - get the first element from a list
 378 * @ptr:        the list head to take the element from.
 379 * @type:       the type of the struct this is embedded in.
 380 * @member:     the name of the list_head within the struct.
 381 *
 382 * Note that if the list is empty, it returns NULL.
 383 */
 384#define list_first_entry_or_null(ptr, type, member) ({ \
 385        struct list_head *head__ = (ptr); \
 386        struct list_head *pos__ = READ_ONCE(head__->next); \
 387        pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
 388})
 389
 390/**
 391 * list_next_entry - get the next element in list
 392 * @pos:        the type * to cursor
 393 * @member:     the name of the list_head within the struct.
 394 */
 395#define list_next_entry(pos, member) \
 396        list_entry((pos)->member.next, typeof(*(pos)), member)
 397
 398/**
 399 * list_prev_entry - get the prev element in list
 400 * @pos:        the type * to cursor
 401 * @member:     the name of the list_head within the struct.
 402 */
 403#define list_prev_entry(pos, member) \
 404        list_entry((pos)->member.prev, typeof(*(pos)), member)
 405
 406/**
 407 * list_for_each        -       iterate over a list
 408 * @pos:        the &struct list_head to use as a loop cursor.
 409 * @head:       the head for your list.
 410 */
 411#define list_for_each(pos, head) \
 412        for (pos = (head)->next; pos != (head); pos = pos->next)
 413
 414/**
 415 * list_for_each_prev   -       iterate over a list backwards
 416 * @pos:        the &struct list_head to use as a loop cursor.
 417 * @head:       the head for your list.
 418 */
 419#define list_for_each_prev(pos, head) \
 420        for (pos = (head)->prev; pos != (head); pos = pos->prev)
 421
 422/**
 423 * list_for_each_safe - iterate over a list safe against removal of list entry
 424 * @pos:        the &struct list_head to use as a loop cursor.
 425 * @n:          another &struct list_head to use as temporary storage
 426 * @head:       the head for your list.
 427 */
 428#define list_for_each_safe(pos, n, head) \
 429        for (pos = (head)->next, n = pos->next; pos != (head); \
 430                pos = n, n = pos->next)
 431
 432/**
 433 * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
 434 * @pos:        the &struct list_head to use as a loop cursor.
 435 * @n:          another &struct list_head to use as temporary storage
 436 * @head:       the head for your list.
 437 */
 438#define list_for_each_prev_safe(pos, n, head) \
 439        for (pos = (head)->prev, n = pos->prev; \
 440             pos != (head); \
 441             pos = n, n = pos->prev)
 442
 443/**
 444 * list_for_each_entry  -       iterate over list of given type
 445 * @pos:        the type * to use as a loop cursor.
 446 * @head:       the head for your list.
 447 * @member:     the name of the list_head within the struct.
 448 */
 449#define list_for_each_entry(pos, head, member)                          \
 450        for (pos = list_first_entry(head, typeof(*pos), member);        \
 451             &pos->member != (head);                                    \
 452             pos = list_next_entry(pos, member))
 453
 454/**
 455 * list_for_each_entry_reverse - iterate backwards over list of given type.
 456 * @pos:        the type * to use as a loop cursor.
 457 * @head:       the head for your list.
 458 * @member:     the name of the list_head within the struct.
 459 */
 460#define list_for_each_entry_reverse(pos, head, member)                  \
 461        for (pos = list_last_entry(head, typeof(*pos), member);         \
 462             &pos->member != (head);                                    \
 463             pos = list_prev_entry(pos, member))
 464
 465/**
 466 * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
 467 * @pos:        the type * to use as a start point
 468 * @head:       the head of the list
 469 * @member:     the name of the list_head within the struct.
 470 *
 471 * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
 472 */
 473#define list_prepare_entry(pos, head, member) \
 474        ((pos) ? : list_entry(head, typeof(*pos), member))
 475
 476/**
 477 * list_for_each_entry_continue - continue iteration over list of given type
 478 * @pos:        the type * to use as a loop cursor.
 479 * @head:       the head for your list.
 480 * @member:     the name of the list_head within the struct.
 481 *
 482 * Continue to iterate over list of given type, continuing after
 483 * the current position.
 484 */
 485#define list_for_each_entry_continue(pos, head, member)                 \
 486        for (pos = list_next_entry(pos, member);                        \
 487             &pos->member != (head);                                    \
 488             pos = list_next_entry(pos, member))
 489
 490/**
 491 * list_for_each_entry_continue_reverse - iterate backwards from the given point
 492 * @pos:        the type * to use as a loop cursor.
 493 * @head:       the head for your list.
 494 * @member:     the name of the list_head within the struct.
 495 *
 496 * Start to iterate over list of given type backwards, continuing after
 497 * the current position.
 498 */
 499#define list_for_each_entry_continue_reverse(pos, head, member)         \
 500        for (pos = list_prev_entry(pos, member);                        \
 501             &pos->member != (head);                                    \
 502             pos = list_prev_entry(pos, member))
 503
 504/**
 505 * list_for_each_entry_from - iterate over list of given type from the current point
 506 * @pos:        the type * to use as a loop cursor.
 507 * @head:       the head for your list.
 508 * @member:     the name of the list_head within the struct.
 509 *
 510 * Iterate over list of given type, continuing from current position.
 511 */
 512#define list_for_each_entry_from(pos, head, member)                     \
 513        for (; &pos->member != (head);                                  \
 514             pos = list_next_entry(pos, member))
 515
 516/**
 517 * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
 518 * @pos:        the type * to use as a loop cursor.
 519 * @n:          another type * to use as temporary storage
 520 * @head:       the head for your list.
 521 * @member:     the name of the list_head within the struct.
 522 */
 523#define list_for_each_entry_safe(pos, n, head, member)                  \
 524        for (pos = list_first_entry(head, typeof(*pos), member),        \
 525                n = list_next_entry(pos, member);                       \
 526             &pos->member != (head);                                    \
 527             pos = n, n = list_next_entry(n, member))
 528
 529/**
 530 * list_for_each_entry_safe_continue - continue list iteration safe against removal
 531 * @pos:        the type * to use as a loop cursor.
 532 * @n:          another type * to use as temporary storage
 533 * @head:       the head for your list.
 534 * @member:     the name of the list_head within the struct.
 535 *
 536 * Iterate over list of given type, continuing after current point,
 537 * safe against removal of list entry.
 538 */
 539#define list_for_each_entry_safe_continue(pos, n, head, member)                 \
 540        for (pos = list_next_entry(pos, member),                                \
 541                n = list_next_entry(pos, member);                               \
 542             &pos->member != (head);                                            \
 543             pos = n, n = list_next_entry(n, member))
 544
 545/**
 546 * list_for_each_entry_safe_from - iterate over list from current point safe against removal
 547 * @pos:        the type * to use as a loop cursor.
 548 * @n:          another type * to use as temporary storage
 549 * @head:       the head for your list.
 550 * @member:     the name of the list_head within the struct.
 551 *
 552 * Iterate over list of given type from current point, safe against
 553 * removal of list entry.
 554 */
 555#define list_for_each_entry_safe_from(pos, n, head, member)                     \
 556        for (n = list_next_entry(pos, member);                                  \
 557             &pos->member != (head);                                            \
 558             pos = n, n = list_next_entry(n, member))
 559
 560/**
 561 * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal
 562 * @pos:        the type * to use as a loop cursor.
 563 * @n:          another type * to use as temporary storage
 564 * @head:       the head for your list.
 565 * @member:     the name of the list_head within the struct.
 566 *
 567 * Iterate backwards over list of given type, safe against removal
 568 * of list entry.
 569 */
 570#define list_for_each_entry_safe_reverse(pos, n, head, member)          \
 571        for (pos = list_last_entry(head, typeof(*pos), member),         \
 572                n = list_prev_entry(pos, member);                       \
 573             &pos->member != (head);                                    \
 574             pos = n, n = list_prev_entry(n, member))
 575
 576/**
 577 * list_safe_reset_next - reset a stale list_for_each_entry_safe loop
 578 * @pos:        the loop cursor used in the list_for_each_entry_safe loop
 579 * @n:          temporary storage used in list_for_each_entry_safe
 580 * @member:     the name of the list_head within the struct.
 581 *
 582 * list_safe_reset_next is not safe to use in general if the list may be
 583 * modified concurrently (eg. the lock is dropped in the loop body). An
 584 * exception to this is if the cursor element (pos) is pinned in the list,
 585 * and list_safe_reset_next is called after re-taking the lock and before
 586 * completing the current iteration of the loop body.
 587 */
 588#define list_safe_reset_next(pos, n, member)                            \
 589        n = list_next_entry(pos, member)
 590
 591/*
 592 * Double linked lists with a single pointer list head.
 593 * Mostly useful for hash tables where the two pointer list head is
 594 * too wasteful.
 595 * You lose the ability to access the tail in O(1).
 596 */
 597
 598#define HLIST_HEAD_INIT { .first = NULL }
 599#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
 600#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
 601static inline void INIT_HLIST_NODE(struct hlist_node *h)
 602{
 603        h->next = NULL;
 604        h->pprev = NULL;
 605}
 606
 607static inline int hlist_unhashed(const struct hlist_node *h)
 608{
 609        return !h->pprev;
 610}
 611
 612static inline int hlist_empty(const struct hlist_head *h)
 613{
 614        return !READ_ONCE(h->first);
 615}
 616
 617static inline void __hlist_del(struct hlist_node *n)
 618{
 619        struct hlist_node *next = n->next;
 620        struct hlist_node **pprev = n->pprev;
 621
 622        WRITE_ONCE(*pprev, next);
 623        if (next)
 624                next->pprev = pprev;
 625}
 626
 627static inline void hlist_del(struct hlist_node *n)
 628{
 629        __hlist_del(n);
 630        n->next = LIST_POISON1;
 631        n->pprev = LIST_POISON2;
 632}
 633
 634static inline void hlist_del_init(struct hlist_node *n)
 635{
 636        if (!hlist_unhashed(n)) {
 637                __hlist_del(n);
 638                INIT_HLIST_NODE(n);
 639        }
 640}
 641
 642static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
 643{
 644        struct hlist_node *first = h->first;
 645        n->next = first;
 646        if (first)
 647                first->pprev = &n->next;
 648        WRITE_ONCE(h->first, n);
 649        n->pprev = &h->first;
 650}
 651
 652/* next must be != NULL */
 653static inline void hlist_add_before(struct hlist_node *n,
 654                                        struct hlist_node *next)
 655{
 656        n->pprev = next->pprev;
 657        n->next = next;
 658        next->pprev = &n->next;
 659        WRITE_ONCE(*(n->pprev), n);
 660}
 661
 662static inline void hlist_add_behind(struct hlist_node *n,
 663                                    struct hlist_node *prev)
 664{
 665        n->next = prev->next;
 666        WRITE_ONCE(prev->next, n);
 667        n->pprev = &prev->next;
 668
 669        if (n->next)
 670                n->next->pprev  = &n->next;
 671}
 672
 673/* after that we'll appear to be on some hlist and hlist_del will work */
 674static inline void hlist_add_fake(struct hlist_node *n)
 675{
 676        n->pprev = &n->next;
 677}
 678
 679static inline bool hlist_fake(struct hlist_node *h)
 680{
 681        return h->pprev == &h->next;
 682}
 683
 684/*
 685 * Check whether the node is the only node of the head without
 686 * accessing head:
 687 */
 688static inline bool
 689hlist_is_singular_node(struct hlist_node *n, struct hlist_head *h)
 690{
 691        return !n->next && n->pprev == &h->first;
 692}
 693
 694/*
 695 * Move a list from one list head to another. Fixup the pprev
 696 * reference of the first entry if it exists.
 697 */
 698static inline void hlist_move_list(struct hlist_head *old,
 699                                   struct hlist_head *new)
 700{
 701        new->first = old->first;
 702        if (new->first)
 703                new->first->pprev = &new->first;
 704        old->first = NULL;
 705}
 706
 707#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
 708
 709#define hlist_for_each(pos, head) \
 710        for (pos = (head)->first; pos ; pos = pos->next)
 711
 712#define hlist_for_each_safe(pos, n, head) \
 713        for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
 714             pos = n)
 715
 716#define hlist_entry_safe(ptr, type, member) \
 717        ({ typeof(ptr) ____ptr = (ptr); \
 718           ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
 719        })
 720
 721/**
 722 * hlist_for_each_entry - iterate over list of given type
 723 * @pos:        the type * to use as a loop cursor.
 724 * @head:       the head for your list.
 725 * @member:     the name of the hlist_node within the struct.
 726 */
 727#define hlist_for_each_entry(pos, head, member)                         \
 728        for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
 729             pos;                                                       \
 730             pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
 731
 732/**
 733 * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
 734 * @pos:        the type * to use as a loop cursor.
 735 * @member:     the name of the hlist_node within the struct.
 736 */
 737#define hlist_for_each_entry_continue(pos, member)                      \
 738        for (pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member);\
 739             pos;                                                       \
 740             pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
 741
 742/**
 743 * hlist_for_each_entry_from - iterate over a hlist continuing from current point
 744 * @pos:        the type * to use as a loop cursor.
 745 * @member:     the name of the hlist_node within the struct.
 746 */
 747#define hlist_for_each_entry_from(pos, member)                          \
 748        for (; pos;                                                     \
 749             pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
 750
 751/**
 752 * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
 753 * @pos:        the type * to use as a loop cursor.
 754 * @n:          another &struct hlist_node to use as temporary storage
 755 * @head:       the head for your list.
 756 * @member:     the name of the hlist_node within the struct.
 757 */
 758#define hlist_for_each_entry_safe(pos, n, head, member)                 \
 759        for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\
 760             pos && ({ n = pos->member.next; 1; });                     \
 761             pos = hlist_entry_safe(n, typeof(*pos), member))
 762
 763#endif
 764