Use max() and min() to calculate loc_base and loc_end, respectively. Skip to the next range if loc_base > loc_end and drop the now-obsolete boolean add variable.
Signed-off-by: Thorsten Blum <[email protected]> --- arch/powerpc/kexec/file_load_64.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/kexec/file_load_64.c b/arch/powerpc/kexec/file_load_64.c index bd80c5fb1b1f..6162afbe919a 100644 --- a/arch/powerpc/kexec/file_load_64.c +++ b/arch/powerpc/kexec/file_load_64.c @@ -20,6 +20,7 @@ #include <linux/of.h> #include <linux/of_address.h> #include <linux/memblock.h> +#include <linux/minmax.h> #include <linux/slab.h> #include <linux/vmalloc.h> #include <asm/setup.h> @@ -104,31 +105,19 @@ static __be64 *check_realloc_usable_mem(struct umem_info *um_info, int cnt) static int add_usable_mem(struct umem_info *um_info, u64 base, u64 end) { u64 loc_base, loc_end; - bool add; int i; for (i = 0; i < um_info->nr_ranges; i++) { - add = false; - loc_base = um_info->ranges[i].start; - loc_end = um_info->ranges[i].end; - if (loc_base >= base && loc_end <= end) - add = true; - else if (base <= loc_end && end >= loc_base) { - if (loc_base < base) - loc_base = base; - if (loc_end > end) - loc_end = end; - add = true; - } + loc_base = max(base, um_info->ranges[i].start); + loc_end = min(end, um_info->ranges[i].end); + if (loc_base > loc_end) + continue; - if (add) { - if (!check_realloc_usable_mem(um_info, 2)) - return -ENOMEM; + if (!check_realloc_usable_mem(um_info, 2)) + return -ENOMEM; - um_info->buf[um_info->idx++] = cpu_to_be64(loc_base); - um_info->buf[um_info->idx++] = - cpu_to_be64(loc_end - loc_base + 1); - } + um_info->buf[um_info->idx++] = cpu_to_be64(loc_base); + um_info->buf[um_info->idx++] = cpu_to_be64(loc_end - loc_base + 1); } return 0;
