| Submitter | Helge Deller |
|---|---|
| Date | 2009-10-29 21:59:01 |
| Message ID | <20091029215901.GA30311@p100.box> |
| Download | mbox | patch |
| Permalink | /patch/56528/ |
| State | Accepted |
| Delegated to: | kyle mcmartin |
| Headers | show |
Comments
Helge Deller wrote: > Signed-off-by: Helge Deller <deller@gmx.de> Excellent. sort() was not there when this was coded up, but always good to stop replicating code :) Signed-off-by: Randolph Chung <tausq@parisc-linux.org> randolph > > > diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c > index 69dad5a..e5a4390 100644 > --- a/arch/parisc/kernel/unwind.c > +++ b/arch/parisc/kernel/unwind.c > @@ -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,21 @@ 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; > - } > - } > + int len; > + > + len = (finish - start) / sizeof(struct unwind_table_entry); > + sort(start, len, sizeof(struct unwind_table_entry), > + cmp_unwind_table_entry, NULL); > } > > struct unwind_table * -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Patch
diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c index 69dad5a..e5a4390 100644 --- a/arch/parisc/kernel/unwind.c +++ b/arch/parisc/kernel/unwind.c @@ -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,21 @@ 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; - } - } + int len; + + len = (finish - start) / sizeof(struct unwind_table_entry); + sort(start, len, sizeof(struct unwind_table_entry), + cmp_unwind_table_entry, NULL); } struct unwind_table *
Signed-off-by: Helge Deller <deller@gmx.de> -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html