diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:41:39 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:41:39 -0500 |
commit | abede81c4fb2e3b85d8760f25e3da39d2c69a134 (patch) | |
tree | 26c893ec108d837eb9171d678c55a1cea7b22af4 /lib | |
parent | c9d557c19f94df42db78d4a5de4d25feee694bad (diff) | |
parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) |
Merge commit 'v2.6.29-rc1' into core/urgent
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig.debug | 23 | ||||
-rw-r--r-- | lib/rbtree.c | 12 | ||||
-rw-r--r-- | lib/sort.c | 30 |
3 files changed, 37 insertions, 28 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 2e75478e9c69..4c9ae6085c75 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -512,6 +512,13 @@ config DEBUG_VIRTUAL | |||
512 | 512 | ||
513 | If unsure, say N. | 513 | If unsure, say N. |
514 | 514 | ||
515 | config DEBUG_NOMMU_REGIONS | ||
516 | bool "Debug the global anon/private NOMMU mapping region tree" | ||
517 | depends on DEBUG_KERNEL && !MMU | ||
518 | help | ||
519 | This option causes the global tree of anonymous and private mapping | ||
520 | regions to be regularly checked for invalid topology. | ||
521 | |||
515 | config DEBUG_WRITECOUNT | 522 | config DEBUG_WRITECOUNT |
516 | bool "Debug filesystem writers count" | 523 | bool "Debug filesystem writers count" |
517 | depends on DEBUG_KERNEL | 524 | depends on DEBUG_KERNEL |
@@ -566,14 +573,14 @@ config DEBUG_NOTIFIERS | |||
566 | config FRAME_POINTER | 573 | config FRAME_POINTER |
567 | bool "Compile the kernel with frame pointers" | 574 | bool "Compile the kernel with frame pointers" |
568 | depends on DEBUG_KERNEL && \ | 575 | depends on DEBUG_KERNEL && \ |
569 | (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || \ | 576 | (CRIS || M68K || M68KNOMMU || FRV || UML || S390 || \ |
570 | AVR32 || SUPERH || BLACKFIN || MN10300) | 577 | AVR32 || SUPERH || BLACKFIN || MN10300) || \ |
571 | default y if DEBUG_INFO && UML | 578 | ARCH_WANT_FRAME_POINTERS |
572 | help | 579 | default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS |
573 | If you say Y here the resulting kernel image will be slightly larger | 580 | help |
574 | and slower, but it might give very useful debugging information on | 581 | If you say Y here the resulting kernel image will be slightly |
575 | some architectures or if you use external debuggers. | 582 | larger and slower, but it gives very useful debugging information |
576 | If you don't debug the kernel, you can say N. | 583 | in case of kernel bugs. (precise oopses/stacktraces/warnings) |
577 | 584 | ||
578 | config BOOT_PRINTK_DELAY | 585 | config BOOT_PRINTK_DELAY |
579 | bool "Delay each boot printk message by N milliseconds" | 586 | bool "Delay each boot printk message by N milliseconds" |
diff --git a/lib/rbtree.c b/lib/rbtree.c index 48499c2d88cc..9956b99649f0 100644 --- a/lib/rbtree.c +++ b/lib/rbtree.c | |||
@@ -292,7 +292,7 @@ EXPORT_SYMBOL(rb_erase); | |||
292 | /* | 292 | /* |
293 | * This function returns the first node (in sort order) of the tree. | 293 | * This function returns the first node (in sort order) of the tree. |
294 | */ | 294 | */ |
295 | struct rb_node *rb_first(struct rb_root *root) | 295 | struct rb_node *rb_first(const struct rb_root *root) |
296 | { | 296 | { |
297 | struct rb_node *n; | 297 | struct rb_node *n; |
298 | 298 | ||
@@ -305,7 +305,7 @@ struct rb_node *rb_first(struct rb_root *root) | |||
305 | } | 305 | } |
306 | EXPORT_SYMBOL(rb_first); | 306 | EXPORT_SYMBOL(rb_first); |
307 | 307 | ||
308 | struct rb_node *rb_last(struct rb_root *root) | 308 | struct rb_node *rb_last(const struct rb_root *root) |
309 | { | 309 | { |
310 | struct rb_node *n; | 310 | struct rb_node *n; |
311 | 311 | ||
@@ -318,7 +318,7 @@ struct rb_node *rb_last(struct rb_root *root) | |||
318 | } | 318 | } |
319 | EXPORT_SYMBOL(rb_last); | 319 | EXPORT_SYMBOL(rb_last); |
320 | 320 | ||
321 | struct rb_node *rb_next(struct rb_node *node) | 321 | struct rb_node *rb_next(const struct rb_node *node) |
322 | { | 322 | { |
323 | struct rb_node *parent; | 323 | struct rb_node *parent; |
324 | 324 | ||
@@ -331,7 +331,7 @@ struct rb_node *rb_next(struct rb_node *node) | |||
331 | node = node->rb_right; | 331 | node = node->rb_right; |
332 | while (node->rb_left) | 332 | while (node->rb_left) |
333 | node=node->rb_left; | 333 | node=node->rb_left; |
334 | return node; | 334 | return (struct rb_node *)node; |
335 | } | 335 | } |
336 | 336 | ||
337 | /* No right-hand children. Everything down and left is | 337 | /* No right-hand children. Everything down and left is |
@@ -347,7 +347,7 @@ struct rb_node *rb_next(struct rb_node *node) | |||
347 | } | 347 | } |
348 | EXPORT_SYMBOL(rb_next); | 348 | EXPORT_SYMBOL(rb_next); |
349 | 349 | ||
350 | struct rb_node *rb_prev(struct rb_node *node) | 350 | struct rb_node *rb_prev(const struct rb_node *node) |
351 | { | 351 | { |
352 | struct rb_node *parent; | 352 | struct rb_node *parent; |
353 | 353 | ||
@@ -360,7 +360,7 @@ struct rb_node *rb_prev(struct rb_node *node) | |||
360 | node = node->rb_left; | 360 | node = node->rb_left; |
361 | while (node->rb_right) | 361 | while (node->rb_right) |
362 | node=node->rb_right; | 362 | node=node->rb_right; |
363 | return node; | 363 | return (struct rb_node *)node; |
364 | } | 364 | } |
365 | 365 | ||
366 | /* No left-hand children. Go up till we find an ancestor which | 366 | /* No left-hand children. Go up till we find an ancestor which |
diff --git a/lib/sort.c b/lib/sort.c index 6abbaf3d5858..926d00429ed2 100644 --- a/lib/sort.c +++ b/lib/sort.c | |||
@@ -32,11 +32,11 @@ static void generic_swap(void *a, void *b, int size) | |||
32 | * @base: pointer to data to sort | 32 | * @base: pointer to data to sort |
33 | * @num: number of elements | 33 | * @num: number of elements |
34 | * @size: size of each element | 34 | * @size: size of each element |
35 | * @cmp: pointer to comparison function | 35 | * @cmp_func: pointer to comparison function |
36 | * @swap: pointer to swap function or NULL | 36 | * @swap_func: pointer to swap function or NULL |
37 | * | 37 | * |
38 | * This function does a heapsort on the given array. You may provide a | 38 | * This function does a heapsort on the given array. You may provide a |
39 | * swap function optimized to your element type. | 39 | * swap_func function optimized to your element type. |
40 | * | 40 | * |
41 | * Sorting time is O(n log n) both on average and worst-case. While | 41 | * Sorting time is O(n log n) both on average and worst-case. While |
42 | * qsort is about 20% faster on average, it suffers from exploitable | 42 | * qsort is about 20% faster on average, it suffers from exploitable |
@@ -45,37 +45,39 @@ static void generic_swap(void *a, void *b, int size) | |||
45 | */ | 45 | */ |
46 | 46 | ||
47 | void sort(void *base, size_t num, size_t size, | 47 | void sort(void *base, size_t num, size_t size, |
48 | int (*cmp)(const void *, const void *), | 48 | int (*cmp_func)(const void *, const void *), |
49 | void (*swap)(void *, void *, int size)) | 49 | void (*swap_func)(void *, void *, int size)) |
50 | { | 50 | { |
51 | /* pre-scale counters for performance */ | 51 | /* pre-scale counters for performance */ |
52 | int i = (num/2 - 1) * size, n = num * size, c, r; | 52 | int i = (num/2 - 1) * size, n = num * size, c, r; |
53 | 53 | ||
54 | if (!swap) | 54 | if (!swap_func) |
55 | swap = (size == 4 ? u32_swap : generic_swap); | 55 | swap_func = (size == 4 ? u32_swap : generic_swap); |
56 | 56 | ||
57 | /* heapify */ | 57 | /* heapify */ |
58 | for ( ; i >= 0; i -= size) { | 58 | for ( ; i >= 0; i -= size) { |
59 | for (r = i; r * 2 + size < n; r = c) { | 59 | for (r = i; r * 2 + size < n; r = c) { |
60 | c = r * 2 + size; | 60 | c = r * 2 + size; |
61 | if (c < n - size && cmp(base + c, base + c + size) < 0) | 61 | if (c < n - size && |
62 | cmp_func(base + c, base + c + size) < 0) | ||
62 | c += size; | 63 | c += size; |
63 | if (cmp(base + r, base + c) >= 0) | 64 | if (cmp_func(base + r, base + c) >= 0) |
64 | break; | 65 | break; |
65 | swap(base + r, base + c, size); | 66 | swap_func(base + r, base + c, size); |
66 | } | 67 | } |
67 | } | 68 | } |
68 | 69 | ||
69 | /* sort */ | 70 | /* sort */ |
70 | for (i = n - size; i > 0; i -= size) { | 71 | for (i = n - size; i > 0; i -= size) { |
71 | swap(base, base + i, size); | 72 | swap_func(base, base + i, size); |
72 | for (r = 0; r * 2 + size < i; r = c) { | 73 | for (r = 0; r * 2 + size < i; r = c) { |
73 | c = r * 2 + size; | 74 | c = r * 2 + size; |
74 | if (c < i - size && cmp(base + c, base + c + size) < 0) | 75 | if (c < i - size && |
76 | cmp_func(base + c, base + c + size) < 0) | ||
75 | c += size; | 77 | c += size; |
76 | if (cmp(base + r, base + c) >= 0) | 78 | if (cmp_func(base + r, base + c) >= 0) |
77 | break; | 79 | break; |
78 | swap(base + r, base + c, size); | 80 | swap_func(base + r, base + c, size); |
79 | } | 81 | } |
80 | } | 82 | } |
81 | } | 83 | } |