diff options
author | Len Brown <len.brown@intel.com> | 2006-06-29 19:57:46 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2006-06-29 19:57:46 -0400 |
commit | d120cfb544ed6161b9d32fb6c4648c471807ee6b (patch) | |
tree | 7757ad0198d8df76ff5c60f939a687687c41da00 /lib | |
parent | 9dce0e950dbfab4148f35ac6f297d8638cdc63c4 (diff) | |
parent | bf7e8511088963078484132636839b59e25cf14f (diff) |
merge linus into release branch
Conflicts:
drivers/acpi/acpi_memhotplug.c
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig | 6 | ||||
-rw-r--r-- | lib/Kconfig.debug | 34 | ||||
-rw-r--r-- | lib/Makefile | 1 | ||||
-rw-r--r-- | lib/plist.c | 118 | ||||
-rw-r--r-- | lib/vsprintf.c | 2 | ||||
-rw-r--r-- | lib/zlib_inflate/inffast.c | 6 | ||||
-rw-r--r-- | lib/zlib_inflate/inftrees.c | 9 |
7 files changed, 165 insertions, 11 deletions
diff --git a/lib/Kconfig b/lib/Kconfig index 3de93357f5ab..f6299342b882 100644 --- a/lib/Kconfig +++ b/lib/Kconfig | |||
@@ -86,4 +86,10 @@ config TEXTSEARCH_BM | |||
86 | config TEXTSEARCH_FSM | 86 | config TEXTSEARCH_FSM |
87 | tristate | 87 | tristate |
88 | 88 | ||
89 | # | ||
90 | # plist support is select#ed if needed | ||
91 | # | ||
92 | config PLIST | ||
93 | boolean | ||
94 | |||
89 | endmenu | 95 | endmenu |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 8bab0102ac73..e4fcbd12cf6e 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -23,6 +23,22 @@ config MAGIC_SYSRQ | |||
23 | keys are documented in <file:Documentation/sysrq.txt>. Don't say Y | 23 | keys are documented in <file:Documentation/sysrq.txt>. Don't say Y |
24 | unless you really know what this hack does. | 24 | unless you really know what this hack does. |
25 | 25 | ||
26 | config UNUSED_SYMBOLS | ||
27 | bool "Enable unused/obsolete exported symbols" | ||
28 | default y if X86 | ||
29 | help | ||
30 | Unused but exported symbols make the kernel needlessly bigger. For | ||
31 | that reason most of these unused exports will soon be removed. This | ||
32 | option is provided temporarily to provide a transition period in case | ||
33 | some external kernel module needs one of these symbols anyway. If you | ||
34 | encounter such a case in your module, consider if you are actually | ||
35 | using the right API. (rationale: since nobody in the kernel is using | ||
36 | this in a module, there is a pretty good chance it's actually the | ||
37 | wrong interface to use). If you really need the symbol, please send a | ||
38 | mail to the linux kernel mailing list mentioning the symbol and why | ||
39 | you really need it, and what the merge plan to the mainline kernel for | ||
40 | your module is. | ||
41 | |||
26 | config DEBUG_KERNEL | 42 | config DEBUG_KERNEL |
27 | bool "Kernel debugging" | 43 | bool "Kernel debugging" |
28 | help | 44 | help |
@@ -107,6 +123,24 @@ config DEBUG_MUTEXES | |||
107 | This allows mutex semantics violations and mutex related deadlocks | 123 | This allows mutex semantics violations and mutex related deadlocks |
108 | (lockups) to be detected and reported automatically. | 124 | (lockups) to be detected and reported automatically. |
109 | 125 | ||
126 | config DEBUG_RT_MUTEXES | ||
127 | bool "RT Mutex debugging, deadlock detection" | ||
128 | depends on DEBUG_KERNEL && RT_MUTEXES | ||
129 | help | ||
130 | This allows rt mutex semantics violations and rt mutex related | ||
131 | deadlocks (lockups) to be detected and reported automatically. | ||
132 | |||
133 | config DEBUG_PI_LIST | ||
134 | bool | ||
135 | default y | ||
136 | depends on DEBUG_RT_MUTEXES | ||
137 | |||
138 | config RT_MUTEX_TESTER | ||
139 | bool "Built-in scriptable tester for rt-mutexes" | ||
140 | depends on DEBUG_KERNEL && RT_MUTEXES | ||
141 | help | ||
142 | This option enables a rt-mutex tester. | ||
143 | |||
110 | config DEBUG_SPINLOCK | 144 | config DEBUG_SPINLOCK |
111 | bool "Spinlock debugging" | 145 | bool "Spinlock debugging" |
112 | depends on DEBUG_KERNEL | 146 | depends on DEBUG_KERNEL |
diff --git a/lib/Makefile b/lib/Makefile index 79358ad1f113..10c13c9d7824 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
@@ -25,6 +25,7 @@ lib-$(CONFIG_SEMAPHORE_SLEEPERS) += semaphore-sleepers.o | |||
25 | lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o | 25 | lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o |
26 | lib-$(CONFIG_GENERIC_HWEIGHT) += hweight.o | 26 | lib-$(CONFIG_GENERIC_HWEIGHT) += hweight.o |
27 | obj-$(CONFIG_LOCK_KERNEL) += kernel_lock.o | 27 | obj-$(CONFIG_LOCK_KERNEL) += kernel_lock.o |
28 | obj-$(CONFIG_PLIST) += plist.o | ||
28 | obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o | 29 | obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o |
29 | 30 | ||
30 | ifneq ($(CONFIG_HAVE_DEC_LOCK),y) | 31 | ifneq ($(CONFIG_HAVE_DEC_LOCK),y) |
diff --git a/lib/plist.c b/lib/plist.c new file mode 100644 index 000000000000..3074a02272f3 --- /dev/null +++ b/lib/plist.c | |||
@@ -0,0 +1,118 @@ | |||
1 | /* | ||
2 | * lib/plist.c | ||
3 | * | ||
4 | * Descending-priority-sorted double-linked list | ||
5 | * | ||
6 | * (C) 2002-2003 Intel Corp | ||
7 | * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>. | ||
8 | * | ||
9 | * 2001-2005 (c) MontaVista Software, Inc. | ||
10 | * Daniel Walker <dwalker@mvista.com> | ||
11 | * | ||
12 | * (C) 2005 Thomas Gleixner <tglx@linutronix.de> | ||
13 | * | ||
14 | * Simplifications of the original code by | ||
15 | * Oleg Nesterov <oleg@tv-sign.ru> | ||
16 | * | ||
17 | * Licensed under the FSF's GNU Public License v2 or later. | ||
18 | * | ||
19 | * Based on simple lists (include/linux/list.h). | ||
20 | * | ||
21 | * This file contains the add / del functions which are considered to | ||
22 | * be too large to inline. See include/linux/plist.h for further | ||
23 | * information. | ||
24 | */ | ||
25 | |||
26 | #include <linux/plist.h> | ||
27 | #include <linux/spinlock.h> | ||
28 | |||
29 | #ifdef CONFIG_DEBUG_PI_LIST | ||
30 | |||
31 | static void plist_check_prev_next(struct list_head *t, struct list_head *p, | ||
32 | struct list_head *n) | ||
33 | { | ||
34 | if (n->prev != p || p->next != n) { | ||
35 | printk("top: %p, n: %p, p: %p\n", t, t->next, t->prev); | ||
36 | printk("prev: %p, n: %p, p: %p\n", p, p->next, p->prev); | ||
37 | printk("next: %p, n: %p, p: %p\n", n, n->next, n->prev); | ||
38 | WARN_ON(1); | ||
39 | } | ||
40 | } | ||
41 | |||
42 | static void plist_check_list(struct list_head *top) | ||
43 | { | ||
44 | struct list_head *prev = top, *next = top->next; | ||
45 | |||
46 | plist_check_prev_next(top, prev, next); | ||
47 | while (next != top) { | ||
48 | prev = next; | ||
49 | next = prev->next; | ||
50 | plist_check_prev_next(top, prev, next); | ||
51 | } | ||
52 | } | ||
53 | |||
54 | static void plist_check_head(struct plist_head *head) | ||
55 | { | ||
56 | WARN_ON(!head->lock); | ||
57 | if (head->lock) | ||
58 | WARN_ON_SMP(!spin_is_locked(head->lock)); | ||
59 | plist_check_list(&head->prio_list); | ||
60 | plist_check_list(&head->node_list); | ||
61 | } | ||
62 | |||
63 | #else | ||
64 | # define plist_check_head(h) do { } while (0) | ||
65 | #endif | ||
66 | |||
67 | /** | ||
68 | * plist_add - add @node to @head | ||
69 | * | ||
70 | * @node: &struct plist_node pointer | ||
71 | * @head: &struct plist_head pointer | ||
72 | */ | ||
73 | void plist_add(struct plist_node *node, struct plist_head *head) | ||
74 | { | ||
75 | struct plist_node *iter; | ||
76 | |||
77 | plist_check_head(head); | ||
78 | WARN_ON(!plist_node_empty(node)); | ||
79 | |||
80 | list_for_each_entry(iter, &head->prio_list, plist.prio_list) { | ||
81 | if (node->prio < iter->prio) | ||
82 | goto lt_prio; | ||
83 | else if (node->prio == iter->prio) { | ||
84 | iter = list_entry(iter->plist.prio_list.next, | ||
85 | struct plist_node, plist.prio_list); | ||
86 | goto eq_prio; | ||
87 | } | ||
88 | } | ||
89 | |||
90 | lt_prio: | ||
91 | list_add_tail(&node->plist.prio_list, &iter->plist.prio_list); | ||
92 | eq_prio: | ||
93 | list_add_tail(&node->plist.node_list, &iter->plist.node_list); | ||
94 | |||
95 | plist_check_head(head); | ||
96 | } | ||
97 | |||
98 | /** | ||
99 | * plist_del - Remove a @node from plist. | ||
100 | * | ||
101 | * @node: &struct plist_node pointer - entry to be removed | ||
102 | * @head: &struct plist_head pointer - list head | ||
103 | */ | ||
104 | void plist_del(struct plist_node *node, struct plist_head *head) | ||
105 | { | ||
106 | plist_check_head(head); | ||
107 | |||
108 | if (!list_empty(&node->plist.prio_list)) { | ||
109 | struct plist_node *next = plist_first(&node->plist); | ||
110 | |||
111 | list_move_tail(&next->plist.prio_list, &node->plist.prio_list); | ||
112 | list_del_init(&node->plist.prio_list); | ||
113 | } | ||
114 | |||
115 | list_del_init(&node->plist.node_list); | ||
116 | |||
117 | plist_check_head(head); | ||
118 | } | ||
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 797428afd111..bed7229378f2 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c | |||
@@ -489,7 +489,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args) | |||
489 | if (str < end) | 489 | if (str < end) |
490 | *str = '\0'; | 490 | *str = '\0'; |
491 | else | 491 | else |
492 | *end = '\0'; | 492 | end[-1] = '\0'; |
493 | } | 493 | } |
494 | /* the trailing null byte doesn't count towards the total */ | 494 | /* the trailing null byte doesn't count towards the total */ |
495 | return str-buf; | 495 | return str-buf; |
diff --git a/lib/zlib_inflate/inffast.c b/lib/zlib_inflate/inffast.c index 02a16eacb72d..d84560c076d8 100644 --- a/lib/zlib_inflate/inffast.c +++ b/lib/zlib_inflate/inffast.c | |||
@@ -63,10 +63,10 @@ | |||
63 | bytes, which is the maximum length that can be coded. inflate_fast() | 63 | bytes, which is the maximum length that can be coded. inflate_fast() |
64 | requires strm->avail_out >= 258 for each loop to avoid checking for | 64 | requires strm->avail_out >= 258 for each loop to avoid checking for |
65 | output space. | 65 | output space. |
66 | |||
67 | - @start: inflate()'s starting value for strm->avail_out | ||
66 | */ | 68 | */ |
67 | void inflate_fast(strm, start) | 69 | void inflate_fast(z_streamp strm, unsigned start) |
68 | z_streamp strm; | ||
69 | unsigned start; /* inflate()'s starting value for strm->avail_out */ | ||
70 | { | 70 | { |
71 | struct inflate_state *state; | 71 | struct inflate_state *state; |
72 | unsigned char *in; /* local strm->next_in */ | 72 | unsigned char *in; /* local strm->next_in */ |
diff --git a/lib/zlib_inflate/inftrees.c b/lib/zlib_inflate/inftrees.c index da665fbb16aa..3fe6ce5b53e5 100644 --- a/lib/zlib_inflate/inftrees.c +++ b/lib/zlib_inflate/inftrees.c | |||
@@ -20,13 +20,8 @@ | |||
20 | table index bits. It will differ if the request is greater than the | 20 | table index bits. It will differ if the request is greater than the |
21 | longest code or if it is less than the shortest code. | 21 | longest code or if it is less than the shortest code. |
22 | */ | 22 | */ |
23 | int zlib_inflate_table(type, lens, codes, table, bits, work) | 23 | int zlib_inflate_table(codetype type, unsigned short *lens, unsigned codes, |
24 | codetype type; | 24 | code **table, unsigned *bits, unsigned short *work) |
25 | unsigned short *lens; | ||
26 | unsigned codes; | ||
27 | code **table; | ||
28 | unsigned *bits; | ||
29 | unsigned short *work; | ||
30 | { | 25 | { |
31 | unsigned len; /* a code's length in bits */ | 26 | unsigned len; /* a code's length in bits */ |
32 | unsigned sym; /* index of code symbols */ | 27 | unsigned sym; /* index of code symbols */ |