parisc: use sort() instead of home-made implementation (v2)
authorHelge Deller <deller@gmx.de>
Fri, 6 Nov 2009 23:07:42 +0000 (23:07 +0000)
committerKyle McMartin <kyle@mcmartin.ca>
Wed, 16 Dec 2009 03:48:55 +0000 (03:48 +0000)
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Randolph Chung <tausq@parisc-linux.org>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
arch/parisc/kernel/unwind.c

index f03f6fb..d58eac1 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/kallsyms.h>
+#include <linux/sort.h>
 
 #include <asm/uaccess.h>
 #include <asm/assembly.h>
@@ -115,24 +116,18 @@ unwind_table_init(struct unwind_table *table, const char *name,
        }
 }
 
+static int cmp_unwind_table_entry(const void *a, const void *b)
+{
+       return ((const struct unwind_table_entry *)a)->region_start
+            - ((const struct unwind_table_entry *)b)->region_start;
+}
+
 static void
 unwind_table_sort(struct unwind_table_entry *start,
                  struct unwind_table_entry *finish)
 {
-       struct unwind_table_entry el, *p, *q;
-
-       for (p = start + 1; p < finish; ++p) {
-               if (p[0].region_start < p[-1].region_start) {
-                       el = *p;
-                       q = p;
-                       do {
-                               q[0] = q[-1];
-                               --q;
-                       } while (q > start && 
-                                el.region_start < q[-1].region_start);
-                       *q = el;
-               }
-       }
+       sort(start, finish - start, sizeof(struct unwind_table_entry),
+            cmp_unwind_table_entry, NULL);
 }
 
 struct unwind_table *