range: Do not add new blank slot with add_range_with_merge
authorYinghai Lu <yinghai@kernel.org>
Thu, 13 Jun 2013 20:17:02 +0000 (13:17 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Tue, 18 Jun 2013 16:32:10 +0000 (11:32 -0500)
commit0541881502a1276149889fe468662ff6a8fc8f6d
tree14bdb51938b710d8b224215bccaea4cbf680b818
parentd8d386c10630d8f7837700f4c466443d49e12cc0
range: Do not add new blank slot with add_range_with_merge

Joshua reported: Commit cd7b304dfaf1 (x86, range: fix missing merge
during add range) broke mtrr cleanup on his setup in 3.9.5.
corresponding commit in upstream is fbe06b7bae7c.

The reason is add_range_with_merge could generate blank spot.

We could avoid that by searching new expanded start/end, that
new range should include all connected ranges in range array.
At last add the new expanded start/end to the range array.
Also move up left array so do not add new blank slot in the
range array.

-v2: move left array to avoid enhance add_range()
-v3: include fix from Joshua about memmove declaring when
     DYN_DEBUG is used.

Reported-by: Joshua Covington <joshuacov@googlemail.com>
Tested-by: Joshua Covington <joshuacov@googlemail.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Link: http://lkml.kernel.org/r/1371154622-8929-3-git-send-email-yinghai@kernel.org
Cc: <stable@vger.kernel.org> v3.9
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
kernel/range.c