Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Copyright 2006, Red Hat, Inc., Dave Jones
  3  * Released under the General Public License (GPL).
  4  *
  5  * This file contains the linked list implementations for
  6  * DEBUG_LIST.
  7  */
  8 
  9 #include <linux/module.h>
 10 #include <linux/list.h>
 11 
 12 /*
 13  * Insert a new entry between two known consecutive entries.
 14  *
 15  * This is only for internal list manipulation where we know
 16  * the prev/next entries already!
 17  */
 18 
 19 void __list_add(struct list_head *new,
 20                               struct list_head *prev,
 21                               struct list_head *next)
 22 {
 23         if (unlikely(next->prev != prev)) {
 24                 printk(KERN_ERR "list_add corruption. next->prev should be "
 25                         "prev (%p), but was %p. (next=%p).\n",
 26                         prev, next->prev, next);
 27                 BUG();
 28         }
 29         if (unlikely(prev->next != next)) {
 30                 printk(KERN_ERR "list_add corruption. prev->next should be "
 31                         "next (%p), but was %p. (prev=%p).\n",
 32                         next, prev->next, prev);
 33                 BUG();
 34         }
 35         next->prev = new;
 36         new->next = next;
 37         new->prev = prev;
 38         prev->next = new;
 39 }
 40 EXPORT_SYMBOL(__list_add);
 41 
 42 /**
 43  * list_add - add a new entry
 44  * @new: new entry to be added
 45  * @head: list head to add it after
 46  *
 47  * Insert a new entry after the specified head.
 48  * This is good for implementing stacks.
 49  */
 50 void list_add(struct list_head *new, struct list_head *head)
 51 {
 52         __list_add(new, head, head->next);
 53 }
 54 EXPORT_SYMBOL(list_add);
 55 
 56 /**
 57  * list_del - deletes entry from list.
 58  * @entry: the element to delete from the list.
 59  * Note: list_empty on entry does not return true after this, the entry is
 60  * in an undefined state.
 61  */
 62 void list_del(struct list_head *entry)
 63 {
 64         if (unlikely(entry->prev->next != entry)) {
 65                 printk(KERN_ERR "list_del corruption. prev->next should be %p, "
 66                                 "but was %p\n", entry, entry->prev->next);
 67                 BUG();
 68         }
 69         if (unlikely(entry->next->prev != entry)) {
 70                 printk(KERN_ERR "list_del corruption. next->prev should be %p, "
 71                                 "but was %p\n", entry, entry->next->prev);
 72                 BUG();
 73         }
 74         __list_del(entry->prev, entry->next);
 75         entry->next = LIST_POISON1;
 76         entry->prev = LIST_POISON2;
 77 }
 78 EXPORT_SYMBOL(list_del);
 79 
  This page was automatically generated by the LXR engine.