summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2010-03-28 19:42:56 -0700
committerIngo Molnar <mingo@elte.hu>2010-03-29 18:55:40 +0200
commiteed63519e3e74d515d2007ecd895338d0ba2a85c (patch)
tree4b33f284ab39080293b287316d18745c770058e2 /kernel
parentc967da6a0ba837f762042e931d4afcf72045547c (diff)
downloadlinux-stable-eed63519e3e74d515d2007ecd895338d0ba2a85c.tar.gz
linux-stable-eed63519e3e74d515d2007ecd895338d0ba2a85c.tar.bz2
linux-stable-eed63519e3e74d515d2007ecd895338d0ba2a85c.zip
x86: Do not free zero sized per cpu areas
This avoids an infinite loop in free_early_partial(). Add a warning to free_early_partial() to catch future problems. -v5: put back start > end back into WARN_ONCE() -v6: use one line for warning, suggested by Linus -v7: more tests -v8: remove the function name as suggested by Johannes WARN_ONCE() will print out that function name. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Tested-by: Joel Becker <joel.becker@oracle.com> Tested-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: David Miller <davem@davemloft.net> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> LKML-Reference: <1269830604-26214-4-git-send-email-yinghai@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/early_res.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/early_res.c b/kernel/early_res.c
index 3cb2c661bb78..31aa9332ef3f 100644
--- a/kernel/early_res.c
+++ b/kernel/early_res.c
@@ -333,6 +333,12 @@ void __init free_early_partial(u64 start, u64 end)
struct early_res *r;
int i;
+ if (start == end)
+ return;
+
+ if (WARN_ONCE(start > end, " wrong range [%#llx, %#llx]\n", start, end))
+ return;
+
try_next:
i = find_overlapped_early(start, end);
if (i >= max_early_res)