diff options
author | Russell King <rmk@arm.linux.org.uk> | 2016-06-06 17:59:39 +0100 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2016-06-08 09:21:52 +0900 |
commit | 7dc06a544ffd192634d624af163791dca791e845 (patch) | |
tree | c81d542f80763a170926d22c75c8f723d496ae76 | |
parent | ba1e37a8ede8d7d981c677ef7273e01aec88da7f (diff) |
kexec: add mem_regions sorting implementation
Add a mem_regions sorting implementation taken from the arm code.
Reviewed-by: Pratyush Anand <panand@redhat.com>
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r-- | kexec/mem_regions.c | 27 | ||||
-rw-r--r-- | kexec/mem_regions.h | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/kexec/mem_regions.c b/kexec/mem_regions.c index 4425b86..7b4bcf3 100644 --- a/kexec/mem_regions.c +++ b/kexec/mem_regions.c @@ -1,6 +1,33 @@ +#include <stdlib.h> + #include "kexec.h" #include "mem_regions.h" +static int mem_range_cmp(const void *a1, const void *a2) +{ + const struct memory_range *r1 = a1; + const struct memory_range *r2 = a2; + + if (r1->start > r2->start) + return 1; + if (r1->start < r2->start) + return -1; + + return 0; +} + +/** + * mem_regions_sort() - sort ranges into ascending address order + * @ranges: ranges to sort + * + * Sort the memory regions into ascending address order. + */ +void mem_regions_sort(struct memory_ranges *ranges) +{ + qsort(ranges->ranges, ranges->size, sizeof(ranges->ranges), + mem_range_cmp); +} + /** * mem_regions_add() - add a memory region to a set of ranges * @ranges: ranges to add the memory region to diff --git a/kexec/mem_regions.h b/kexec/mem_regions.h index b9cfba1..da7b5e8 100644 --- a/kexec/mem_regions.h +++ b/kexec/mem_regions.h @@ -3,6 +3,8 @@ struct memory_ranges; +void mem_regions_sort(struct memory_ranges *ranges); + int mem_regions_add(struct memory_ranges *ranges, unsigned long long base, unsigned long long length, int type); |