Root/
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 | WARN(next->prev != prev, |
24 | "list_add corruption. next->prev should be " |
25 | "prev (%p), but was %p. (next=%p).\n", |
26 | prev, next->prev, next); |
27 | WARN(prev->next != next, |
28 | "list_add corruption. prev->next should be " |
29 | "next (%p), but was %p. (prev=%p).\n", |
30 | next, prev->next, prev); |
31 | next->prev = new; |
32 | new->next = next; |
33 | new->prev = prev; |
34 | prev->next = new; |
35 | } |
36 | EXPORT_SYMBOL(__list_add); |
37 | |
38 | void __list_del_entry(struct list_head *entry) |
39 | { |
40 | struct list_head *prev, *next; |
41 | |
42 | prev = entry->prev; |
43 | next = entry->next; |
44 | |
45 | if (WARN(next == LIST_POISON1, |
46 | "list_del corruption, %p->next is LIST_POISON1 (%p)\n", |
47 | entry, LIST_POISON1) || |
48 | WARN(prev == LIST_POISON2, |
49 | "list_del corruption, %p->prev is LIST_POISON2 (%p)\n", |
50 | entry, LIST_POISON2) || |
51 | WARN(prev->next != entry, |
52 | "list_del corruption. prev->next should be %p, " |
53 | "but was %p\n", entry, prev->next) || |
54 | WARN(next->prev != entry, |
55 | "list_del corruption. next->prev should be %p, " |
56 | "but was %p\n", entry, next->prev)) |
57 | return; |
58 | |
59 | __list_del(prev, next); |
60 | } |
61 | EXPORT_SYMBOL(__list_del_entry); |
62 | |
63 | /** |
64 | * list_del - deletes entry from list. |
65 | * @entry: the element to delete from the list. |
66 | * Note: list_empty on entry does not return true after this, the entry is |
67 | * in an undefined state. |
68 | */ |
69 | void list_del(struct list_head *entry) |
70 | { |
71 | __list_del_entry(entry); |
72 | entry->next = LIST_POISON1; |
73 | entry->prev = LIST_POISON2; |
74 | } |
75 | EXPORT_SYMBOL(list_del); |
76 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9