linux-bk/include/linux/list.h
<<
>>
Prefs
   1#ifndef _LINUX_LIST_H
   2#define _LINUX_LIST_H
   3
   4#ifdef __KERNEL__
   5
   6#include <linux/stddef.h>
   7#include <linux/prefetch.h>
   8#include <asm/system.h>
   9
  10/*
  11 * These are non-NULL pointers that will result in page faults
  12 * under normal circumstances, used to verify that nobody uses
  13 * non-initialized list entries.
  14 */
  15#define LIST_POISON1  ((void *) 0x00100100)
  16#define LIST_POISON2  ((void *) 0x00200200)
  17
  18/*
  19 * Simple doubly linked list implementation.
  20 *
  21 * Some of the internal functions ("__xxx") are useful when
  22 * manipulating whole lists rather than single entries, as
  23 * sometimes we already know the next/prev entries and we can
  24 * generate better code by using them directly rather than
  25 * using the generic single-entry routines.
  26 */
  27
  28struct list_head {
  29        struct list_head *next, *prev;
  30};
  31
  32#define LIST_HEAD_INIT(name) { &(name), &(name) }
  33
  34#define LIST_HEAD(name) \
  35        struct list_head name = LIST_HEAD_INIT(name)
  36
  37#define INIT_LIST_HEAD(ptr) do { \
  38        (ptr)->next = (ptr); (ptr)->prev = (ptr); \
  39} while (0)
  40
  41/*
  42 * Insert a new entry between two known consecutive entries.
  43 *
  44 * This is only for internal list manipulation where we know
  45 * the prev/next entries already!
  46 */
  47static inline void __list_add(struct list_head *new,
  48                              struct list_head *prev,
  49                              struct list_head *next)
  50{
  51        next->prev = new;
  52        new->next = next;
  53        new->prev = prev;
  54        prev->next = new;
  55}
  56
  57/**
  58 * list_add - add a new entry
  59 * @new: new entry to be added
  60 * @head: list head to add it after
  61 *
  62 * Insert a new entry after the specified head.
  63 * This is good for implementing stacks.
  64 */
  65static inline void list_add(struct list_head *new, struct list_head *head)
  66{
  67        __list_add(new, head, head->next);
  68}
  69
  70/**
  71 * list_add_tail - add a new entry
  72 * @new: new entry to be added
  73 * @head: list head to add it before
  74 *
  75 * Insert a new entry before the specified head.
  76 * This is useful for implementing queues.
  77 */
  78static inline void list_add_tail(struct list_head *new, struct list_head *head)
  79{
  80        __list_add(new, head->prev, head);
  81}
  82
  83/*
  84 * Insert a new entry between two known consecutive entries.
  85 *
  86 * This is only for internal list manipulation where we know
  87 * the prev/next entries already!
  88 */
  89static inline void __list_add_rcu(struct list_head * new,
  90                struct list_head * prev, struct list_head * next)
  91{
  92        new->next = next;
  93        new->prev = prev;
  94        smp_wmb();
  95        next->prev = new;
  96        prev->next = new;
  97}
  98
  99/**
 100 * list_add_rcu - add a new entry to rcu-protected list
 101 * @new: new entry to be added
 102 * @head: list head to add it after
 103 *
 104 * Insert a new entry after the specified head.
 105 * This is good for implementing stacks.
 106 *
 107 * The caller must take whatever precautions are necessary
 108 * (such as holding appropriate locks) to avoid racing
 109 * with another list-mutation primitive, such as list_add_rcu()
 110 * or list_del_rcu(), running on this same list.
 111 * However, it is perfectly legal to run concurrently with
 112 * the _rcu list-traversal primitives, such as
 113 * list_for_each_entry_rcu().
 114 */
 115static inline void list_add_rcu(struct list_head *new, struct list_head *head)
 116{
 117        __list_add_rcu(new, head, head->next);
 118}
 119
 120/**
 121 * list_add_tail_rcu - add a new entry to rcu-protected list
 122 * @new: new entry to be added
 123 * @head: list head to add it before
 124 *
 125 * Insert a new entry before the specified head.
 126 * This is useful for implementing queues.
 127 *
 128 * The caller must take whatever precautions are necessary
 129 * (such as holding appropriate locks) to avoid racing
 130 * with another list-mutation primitive, such as list_add_tail_rcu()
 131 * or list_del_rcu(), running on this same list.
 132 * However, it is perfectly legal to run concurrently with
 133 * the _rcu list-traversal primitives, such as
 134 * list_for_each_entry_rcu().
 135 */
 136static inline void list_add_tail_rcu(struct list_head *new,
 137                                        struct list_head *head)
 138{
 139        __list_add_rcu(new, head->prev, head);
 140}
 141
 142/*
 143 * Delete a list entry by making the prev/next entries
 144 * point to each other.
 145 *
 146 * This is only for internal list manipulation where we know
 147 * the prev/next entries already!
 148 */
 149static inline void __list_del(struct list_head * prev, struct list_head * next)
 150{
 151        next->prev = prev;
 152        prev->next = next;
 153}
 154
 155/**
 156 * list_del - deletes entry from list.
 157 * @entry: the element to delete from the list.
 158 * Note: list_empty on entry does not return true after this, the entry is
 159 * in an undefined state.
 160 */
 161static inline void list_del(struct list_head *entry)
 162{
 163        __list_del(entry->prev, entry->next);
 164        entry->next = LIST_POISON1;
 165        entry->prev = LIST_POISON2;
 166}
 167
 168/**
 169 * list_del_rcu - deletes entry from list without re-initialization
 170 * @entry: the element to delete from the list.
 171 *
 172 * Note: list_empty on entry does not return true after this,
 173 * the entry is in an undefined state. It is useful for RCU based
 174 * lockfree traversal.
 175 *
 176 * In particular, it means that we can not poison the forward
 177 * pointers that may still be used for walking the list.
 178 *
 179 * The caller must take whatever precautions are necessary
 180 * (such as holding appropriate locks) to avoid racing
 181 * with another list-mutation primitive, such as list_del_rcu()
 182 * or list_add_rcu(), running on this same list.
 183 * However, it is perfectly legal to run concurrently with
 184 * the _rcu list-traversal primitives, such as
 185 * list_for_each_entry_rcu().
 186 *
 187 * Note that the caller is not permitted to immediately free
 188 * the newly deleted entry.  Instead, either synchronize_kernel()
 189 * or call_rcu() must be used to defer freeing until an RCU
 190 * grace period has elapsed.
 191 */
 192static inline void list_del_rcu(struct list_head *entry)
 193{
 194        __list_del(entry->prev, entry->next);
 195        entry->prev = LIST_POISON2;
 196}
 197
 198/*
 199 * list_replace_rcu - replace old entry by new one
 200 * @old : the element to be replaced
 201 * @new : the new element to insert
 202 *
 203 * The old entry will be replaced with the new entry atomically.
 204 */
 205static inline void list_replace_rcu(struct list_head *old, struct list_head *new){
 206        new->next = old->next;
 207        new->prev = old->prev;
 208        smp_wmb();
 209        new->next->prev = new;
 210        new->prev->next = new;
 211}
 212
 213/**
 214 * list_del_init - deletes entry from list and reinitialize it.
 215 * @entry: the element to delete from the list.
 216 */
 217static inline void list_del_init(struct list_head *entry)
 218{
 219        __list_del(entry->prev, entry->next);
 220        INIT_LIST_HEAD(entry);
 221}
 222
 223/**
 224 * list_move - delete from one list and add as another's head
 225 * @list: the entry to move
 226 * @head: the head that will precede our entry
 227 */
 228static inline void list_move(struct list_head *list, struct list_head *head)
 229{
 230        __list_del(list->prev, list->next);
 231        list_add(list, head);
 232}
 233
 234/**
 235 * list_move_tail - delete from one list and add as another's tail
 236 * @list: the entry to move
 237 * @head: the head that will follow our entry
 238 */
 239static inline void list_move_tail(struct list_head *list,
 240                                  struct list_head *head)
 241{
 242        __list_del(list->prev, list->next);
 243        list_add_tail(list, head);
 244}
 245
 246/**
 247 * list_empty - tests whether a list is empty
 248 * @head: the list to test.
 249 */
 250static inline int list_empty(const struct list_head *head)
 251{
 252        return head->next == head;
 253}
 254
 255/**
 256 * list_empty_careful - tests whether a list is
 257 * empty _and_ checks that no other CPU might be
 258 * in the process of still modifying either member
 259 *
 260 * NOTE: using list_empty_careful() without synchronization
 261 * can only be safe if the only activity that can happen
 262 * to the list entry is list_del_init(). Eg. it cannot be used
 263 * if another CPU could re-list_add() it.
 264 *
 265 * @head: the list to test.
 266 */
 267static inline int list_empty_careful(const struct list_head *head)
 268{
 269        struct list_head *next = head->next;
 270        return (next == head) && (next == head->prev);
 271}
 272
 273static inline void __list_splice(struct list_head *list,
 274                                 struct list_head *head)
 275{
 276        struct list_head *first = list->next;
 277        struct list_head *last = list->prev;
 278        struct list_head *at = head->next;
 279
 280        first->prev = head;
 281        head->next = first;
 282
 283        last->next = at;
 284        at->prev = last;
 285}
 286
 287/**
 288 * list_splice - join two lists
 289 * @list: the new list to add.
 290 * @head: the place to add it in the first list.
 291 */
 292static inline void list_splice(struct list_head *list, struct list_head *head)
 293{
 294        if (!list_empty(list))
 295                __list_splice(list, head);
 296}
 297
 298/**
 299 * list_splice_init - join two lists and reinitialise the emptied list.
 300 * @list: the new list to add.
 301 * @head: the place to add it in the first list.
 302 *
 303 * The list at @list is reinitialised
 304 */
 305static inline void list_splice_init(struct list_head *list,
 306                                    struct list_head *head)
 307{
 308        if (!list_empty(list)) {
 309                __list_splice(list, head);
 310                INIT_LIST_HEAD(list);
 311        }
 312}
 313
 314/**
 315 * list_entry - get the struct for this entry
 316 * @ptr:        the &struct list_head pointer.
 317 * @type:       the type of the struct this is embedded in.
 318 * @member:     the name of the list_struct within the struct.
 319 */
 320#define list_entry(ptr, type, member) \
 321        container_of(ptr, type, member)
 322
 323/**
 324 * list_for_each        -       iterate over a list
 325 * @pos:        the &struct list_head to use as a loop counter.
 326 * @head:       the head for your list.
 327 */
 328#define list_for_each(pos, head) \
 329        for (pos = (head)->next, prefetch(pos->next); pos != (head); \
 330                pos = pos->next, prefetch(pos->next))
 331
 332/**
 333 * __list_for_each      -       iterate over a list
 334 * @pos:        the &struct list_head to use as a loop counter.
 335 * @head:       the head for your list.
 336 *
 337 * This variant differs from list_for_each() in that it's the
 338 * simplest possible list iteration code, no prefetching is done.
 339 * Use this for code that knows the list to be very short (empty
 340 * or 1 entry) most of the time.
 341 */
 342#define __list_for_each(pos, head) \
 343        for (pos = (head)->next; pos != (head); pos = pos->next)
 344
 345/**
 346 * list_for_each_prev   -       iterate over a list backwards
 347 * @pos:        the &struct list_head to use as a loop counter.
 348 * @head:       the head for your list.
 349 */
 350#define list_for_each_prev(pos, head) \
 351        for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \
 352                pos = pos->prev, prefetch(pos->prev))
 353
 354/**
 355 * list_for_each_safe   -       iterate over a list safe against removal of list entry
 356 * @pos:        the &struct list_head to use as a loop counter.
 357 * @n:          another &struct list_head to use as temporary storage
 358 * @head:       the head for your list.
 359 */
 360#define list_for_each_safe(pos, n, head) \
 361        for (pos = (head)->next, n = pos->next; pos != (head); \
 362                pos = n, n = pos->next)
 363
 364/**
 365 * list_for_each_entry  -       iterate over list of given type
 366 * @pos:        the type * to use as a loop counter.
 367 * @head:       the head for your list.
 368 * @member:     the name of the list_struct within the struct.
 369 */
 370#define list_for_each_entry(pos, head, member)                          \
 371        for (pos = list_entry((head)->next, typeof(*pos), member),      \
 372                     prefetch(pos->member.next);                        \
 373             &pos->member != (head);                                    \
 374             pos = list_entry(pos->member.next, typeof(*pos), member),  \
 375                     prefetch(pos->member.next))
 376
 377/**
 378 * list_for_each_entry_reverse - iterate backwards over list of given type.
 379 * @pos:        the type * to use as a loop counter.
 380 * @head:       the head for your list.
 381 * @member:     the name of the list_struct within the struct.
 382 */
 383#define list_for_each_entry_reverse(pos, head, member)                  \
 384        for (pos = list_entry((head)->prev, typeof(*pos), member),      \
 385                     prefetch(pos->member.prev);                        \
 386             &pos->member != (head);                                    \
 387             pos = list_entry(pos->member.prev, typeof(*pos), member),  \
 388                     prefetch(pos->member.prev))
 389
 390/**
 391 * list_prepare_entry - prepare a pos entry for use as a start point in
 392 *                      list_for_each_entry_continue
 393 * @pos:        the type * to use as a start point
 394 * @head:       the head of the list
 395 * @member:     the name of the list_struct within the struct.
 396 */
 397#define list_prepare_entry(pos, head, member) \
 398        ((pos) ? : list_entry(head, typeof(*pos), member))
 399
 400/**
 401 * list_for_each_entry_continue -       iterate over list of given type
 402 *                      continuing after existing point
 403 * @pos:        the type * to use as a loop counter.
 404 * @head:       the head for your list.
 405 * @member:     the name of the list_struct within the struct.
 406 */
 407#define list_for_each_entry_continue(pos, head, member)                 \
 408        for (pos = list_entry(pos->member.next, typeof(*pos), member),  \
 409                     prefetch(pos->member.next);                        \
 410             &pos->member != (head);                                    \
 411             pos = list_entry(pos->member.next, typeof(*pos), member),  \
 412                     prefetch(pos->member.next))
 413
 414/**
 415 * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
 416 * @pos:        the type * to use as a loop counter.
 417 * @n:          another type * to use as temporary storage
 418 * @head:       the head for your list.
 419 * @member:     the name of the list_struct within the struct.
 420 */
 421#define list_for_each_entry_safe(pos, n, head, member)                  \
 422        for (pos = list_entry((head)->next, typeof(*pos), member),      \
 423                n = list_entry(pos->member.next, typeof(*pos), member); \
 424             &pos->member != (head);                                    \
 425             pos = n, n = list_entry(n->member.next, typeof(*n), member))
 426
 427/**
 428 * list_for_each_rcu    -       iterate over an rcu-protected list
 429 * @pos:        the &struct list_head to use as a loop counter.
 430 * @head:       the head for your list.
 431 *
 432 * This list-traversal primitive may safely run concurrently with
 433 * the _rcu list-mutation primitives such as list_add_rcu()
 434 * as long as the traversal is guarded by rcu_read_lock().
 435 */
 436#define list_for_each_rcu(pos, head) \
 437        for (pos = (head)->next, prefetch(pos->next); pos != (head); \
 438                pos = rcu_dereference(pos->next), prefetch(pos->next))
 439
 440#define __list_for_each_rcu(pos, head) \
 441        for (pos = (head)->next; pos != (head); \
 442                pos = rcu_dereference(pos->next))
 443
 444/**
 445 * list_for_each_safe_rcu       -       iterate over an rcu-protected list safe
 446 *                                      against removal of list entry
 447 * @pos:        the &struct list_head to use as a loop counter.
 448 * @n:          another &struct list_head to use as temporary storage
 449 * @head:       the head for your list.
 450 *
 451 * This list-traversal primitive may safely run concurrently with
 452 * the _rcu list-mutation primitives such as list_add_rcu()
 453 * as long as the traversal is guarded by rcu_read_lock().
 454 */
 455#define list_for_each_safe_rcu(pos, n, head) \
 456        for (pos = (head)->next, n = pos->next; pos != (head); \
 457                pos = rcu_dereference(n), n = pos->next)
 458
 459/**
 460 * list_for_each_entry_rcu      -       iterate over rcu list of given type
 461 * @pos:        the type * to use as a loop counter.
 462 * @head:       the head for your list.
 463 * @member:     the name of the list_struct within the struct.
 464 *
 465 * This list-traversal primitive may safely run concurrently with
 466 * the _rcu list-mutation primitives such as list_add_rcu()
 467 * as long as the traversal is guarded by rcu_read_lock().
 468 */
 469#define list_for_each_entry_rcu(pos, head, member)                      \
 470        for (pos = list_entry((head)->next, typeof(*pos), member),      \
 471                     prefetch(pos->member.next);                        \
 472             &pos->member != (head);                                    \
 473             pos = rcu_dereference(list_entry(pos->member.next,         \
 474                                        typeof(*pos), member)),         \
 475                     prefetch(pos->member.next))
 476
 477
 478/**
 479 * list_for_each_continue_rcu   -       iterate over an rcu-protected list
 480 *                      continuing after existing point.
 481 * @pos:        the &struct list_head to use as a loop counter.
 482 * @head:       the head for your list.
 483 *
 484 * This list-traversal primitive may safely run concurrently with
 485 * the _rcu list-mutation primitives such as list_add_rcu()
 486 * as long as the traversal is guarded by rcu_read_lock().
 487 */
 488#define list_for_each_continue_rcu(pos, head) \
 489        for ((pos) = (pos)->next, prefetch((pos)->next); (pos) != (head); \
 490                (pos) = rcu_dereference((pos)->next), prefetch((pos)->next))
 491
 492/*
 493 * Double linked lists with a single pointer list head.
 494 * Mostly useful for hash tables where the two pointer list head is
 495 * too wasteful.
 496 * You lose the ability to access the tail in O(1).
 497 */
 498
 499struct hlist_head {
 500        struct hlist_node *first;
 501};
 502
 503struct hlist_node {
 504        struct hlist_node *next, **pprev;
 505};
 506
 507#define HLIST_HEAD_INIT { .first = NULL }
 508#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
 509#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
 510#define INIT_HLIST_NODE(ptr) ((ptr)->next = NULL, (ptr)->pprev = NULL)
 511
 512static inline int hlist_unhashed(const struct hlist_node *h)
 513{
 514        return !h->pprev;
 515}
 516
 517static inline int hlist_empty(const struct hlist_head *h)
 518{
 519        return !h->first;
 520}
 521
 522static inline void __hlist_del(struct hlist_node *n)
 523{
 524        struct hlist_node *next = n->next;
 525        struct hlist_node **pprev = n->pprev;
 526        *pprev = next;
 527        if (next)
 528                next->pprev = pprev;
 529}
 530
 531static inline void hlist_del(struct hlist_node *n)
 532{
 533        __hlist_del(n);
 534        n->next = LIST_POISON1;
 535        n->pprev = LIST_POISON2;
 536}
 537
 538/**
 539 * hlist_del_rcu - deletes entry from hash list without re-initialization
 540 * @n: the element to delete from the hash list.
 541 *
 542 * Note: list_unhashed() on entry does not return true after this,
 543 * the entry is in an undefined state. It is useful for RCU based
 544 * lockfree traversal.
 545 *
 546 * In particular, it means that we can not poison the forward
 547 * pointers that may still be used for walking the hash list.
 548 *
 549 * The caller must take whatever precautions are necessary
 550 * (such as holding appropriate locks) to avoid racing
 551 * with another list-mutation primitive, such as hlist_add_head_rcu()
 552 * or hlist_del_rcu(), running on this same list.
 553 * However, it is perfectly legal to run concurrently with
 554 * the _rcu list-traversal primitives, such as
 555 * hlist_for_each_entry().
 556 */
 557static inline void hlist_del_rcu(struct hlist_node *n)
 558{
 559        __hlist_del(n);
 560        n->pprev = LIST_POISON2;
 561}
 562
 563static inline void hlist_del_init(struct hlist_node *n)
 564{
 565        if (n->pprev)  {
 566                __hlist_del(n);
 567                INIT_HLIST_NODE(n);
 568        }
 569}
 570
 571static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
 572{
 573        struct hlist_node *first = h->first;
 574        n->next = first;
 575        if (first)
 576                first->pprev = &n->next;
 577        h->first = n;
 578        n->pprev = &h->first;
 579}
 580
 581
 582/**
 583 * hlist_add_head_rcu - adds the specified element to the specified hlist,
 584 * while permitting racing traversals.
 585 * @n: the element to add to the hash list.
 586 * @h: the list to add to.
 587 *
 588 * The caller must take whatever precautions are necessary
 589 * (such as holding appropriate locks) to avoid racing
 590 * with another list-mutation primitive, such as hlist_add_head_rcu()
 591 * or hlist_del_rcu(), running on this same list.
 592 * However, it is perfectly legal to run concurrently with
 593 * the _rcu list-traversal primitives, such as
 594 * hlist_for_each_rcu(), used to prevent memory-consistency
 595 * problems on Alpha CPUs.  Regardless of the type of CPU, the
 596 * list-traversal primitive must be guarded by rcu_read_lock().
 597 */
 598static inline void hlist_add_head_rcu(struct hlist_node *n,
 599                                        struct hlist_head *h)
 600{
 601        struct hlist_node *first = h->first;
 602        n->next = first;
 603        n->pprev = &h->first;
 604        smp_wmb();
 605        if (first)
 606                first->pprev = &n->next;
 607        h->first = n;
 608}
 609
 610/* next must be != NULL */
 611static inline void hlist_add_before(struct hlist_node *n,
 612                                        struct hlist_node *next)
 613{
 614        n->pprev = next->pprev;
 615        n->next = next;
 616        next->pprev = &n->next;
 617        *(n->pprev) = n;
 618}
 619
 620static inline void hlist_add_after(struct hlist_node *n,
 621                                        struct hlist_node *next)
 622{
 623        next->next = n->next;
 624        n->next = next;
 625        next->pprev = &n->next;
 626
 627        if(next->next)
 628                next->next->pprev  = &next->next;
 629}
 630
 631#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
 632
 633#define hlist_for_each(pos, head) \
 634        for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
 635             pos = pos->next)
 636
 637#define hlist_for_each_safe(pos, n, head) \
 638        for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
 639             pos = n)
 640
 641#define hlist_for_each_rcu(pos, head) \
 642        for ((pos) = (head)->first; pos && ({ prefetch((pos)->next); 1; }); \
 643                (pos) = rcu_dereference((pos)->next))
 644
 645/**
 646 * hlist_for_each_entry - iterate over list of given type
 647 * @tpos:       the type * to use as a loop counter.
 648 * @pos:        the &struct hlist_node to use as a loop counter.
 649 * @head:       the head for your list.
 650 * @member:     the name of the hlist_node within the struct.
 651 */
 652#define hlist_for_each_entry(tpos, pos, head, member)                    \
 653        for (pos = (head)->first;                                        \
 654             pos && ({ prefetch(pos->next); 1;}) &&                      \
 655                ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
 656             pos = pos->next)
 657
 658/**
 659 * hlist_for_each_entry_continue - iterate over a hlist continuing after existing point
 660 * @tpos:       the type * to use as a loop counter.
 661 * @pos:        the &struct hlist_node to use as a loop counter.
 662 * @member:     the name of the hlist_node within the struct.
 663 */
 664#define hlist_for_each_entry_continue(tpos, pos, member)                 \
 665        for (pos = (pos)->next;                                          \
 666             pos && ({ prefetch(pos->next); 1;}) &&                      \
 667                ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
 668             pos = pos->next)
 669
 670/**
 671 * hlist_for_each_entry_from - iterate over a hlist continuing from existing point
 672 * @tpos:       the type * to use as a loop counter.
 673 * @pos:        the &struct hlist_node to use as a loop counter.
 674 * @member:     the name of the hlist_node within the struct.
 675 */
 676#define hlist_for_each_entry_from(tpos, pos, member)                     \
 677        for (; pos && ({ prefetch(pos->next); 1;}) &&                    \
 678                ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
 679             pos = pos->next)
 680
 681/**
 682 * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
 683 * @tpos:       the type * to use as a loop counter.
 684 * @pos:        the &struct hlist_node to use as a loop counter.
 685 * @n:          another &struct hlist_node to use as temporary storage
 686 * @head:       the head for your list.
 687 * @member:     the name of the hlist_node within the struct.
 688 */
 689#define hlist_for_each_entry_safe(tpos, pos, n, head, member)            \
 690        for (pos = (head)->first;                                        \
 691             pos && ({ n = pos->next; 1; }) &&                           \
 692                ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
 693             pos = n)
 694
 695/**
 696 * hlist_for_each_entry_rcu - iterate over rcu list of given type
 697 * @pos:        the type * to use as a loop counter.
 698 * @pos:        the &struct hlist_node to use as a loop counter.
 699 * @head:       the head for your list.
 700 * @member:     the name of the hlist_node within the struct.
 701 *
 702 * This list-traversal primitive may safely run concurrently with
 703 * the _rcu list-mutation primitives such as hlist_add_rcu()
 704 * as long as the traversal is guarded by rcu_read_lock().
 705 */
 706#define hlist_for_each_entry_rcu(tpos, pos, head, member)                \
 707        for (pos = (head)->first;                                        \
 708             pos && ({ prefetch(pos->next); 1;}) &&                      \
 709                ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
 710             pos = rcu_dereference(pos->next))
 711
 712#else
 713#warning "don't include kernel headers in userspace"
 714#endif /* __KERNEL__ */
 715#endif
 716
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.