On Fri, Nov 15, 2019 at 05:43:49PM +0800, Shile Zhang wrote: > On 2019/11/15 17:07, Peter Zijlstra wrote: > > On Fri, Nov 15, 2019 at 02:47:49PM +0800, Shile Zhang wrote: > > > +/** > > > + * sort - sort an array of elements > > > + * @base: pointer to data to sort > > > + * @num: number of elements > > > + * @size: size of each element > > > + * @cmp_func: pointer to comparison function > > > + * @swap_func: pointer to swap function > > > + * > > > + * This function does a heapsort on the given array. You may provide a > > > + * swap_func function optimized to your element type. > > > + * > > > + * Sorting time is O(n log n) both on average and worst-case. While > > > + * qsort is about 20% faster on average, it suffers from exploitable > > > + * O(n*n) worst-case behavior and extra memory requirements that make > > > + * it less suitable for kernel use. > > > + * > > > + * This code token out of /lib/sort.c. > > > + */ > > > +static void sort(void *base, size_t num, size_t size, > > > + int (*cmp_func)(const void *, const void *), > > > + void (*swap_func)(void *, void *, int size)) > > > +{ > > > +} > > Do we really need to copy the heapsort implementation? That is, why not > > use libc's qsort() ? This is userspace after all. > > Yes, I think qsort is better choice than copy-paste here. But qsort does not > support customized swap func, which is needed for ORC unwind swap two tables > together. > I think it's hard to do with qsort, so I used sort same with original orc > unwind table sort. Urgh, you're right. That's unforunate.