From: Samuel Liao <samuell...@tencent.com>
commit fbe06b7bae7c9cf6ab05168fce5ee93b2f4bae7c broken the mtrr_cleanup due to return incorrect merged range. this patch remove the empty range by swapping with the last. Error messages: Jun 9 14:06:18 kernel: [ 0.000000] *BAD*gran_size: 64K chunk_size: 64K num_reg: 4 lose cover RAM: -0G Jun 9 14:06:18 kernel: [ 0.000000] *BAD*gran_size: 64K chunk_size: 128K num_reg: 4 lose cover RAM: -0G Jun 9 14:06:18 kernel: [ 0.000000] *BAD*gran_size: 64K chunk_size: 256K num_reg: 4 lose cover RAM: -0G Jun 9 14:06:18 kernel: [ 0.000000] *BAD*gran_size: 64K chunk_size: 512K num_reg: 4 lose cover RAM: -0G Signed-off-by: Samuel Liao <samuell...@tencent.com> --- kernel/range.c | 15 ++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/kernel/range.c b/kernel/range.c index eb911db..b723697 100644 --- a/kernel/range.c +++ b/kernel/range.c @@ -48,11 +48,18 @@ int add_range_with_merge(struct range *range, int az, int nr_range, final_start = min(range[i].start, start); final_end = max(range[i].end, end); + if (final_start == range[i].start && final_end == range[i].end) + return nr_range; + /* clear it and add it back for further merge */ - range[i].start = 0; - range[i].end = 0; - return add_range_with_merge(range, az, nr_range, - final_start, final_end); + nr_range -= 1; + if (i != nr_range) { + range[i].start = range[nr_range].start; + range[i].end = range[nr_range].end; + } + range[nr_range].start = 0; + range[nr_range].end = 0; + i = -1; } /* Need to add it: */ -- 1.8.2.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/