diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-03-05 22:18:50 -0800 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 01:14:19 -0800 |
commit | f7c00338cfeef125032aa12aa8ebeacf9e117e81 (patch) | |
tree | 3fc55d603a0c59aa8a4db63e4acc63b26170b7cb /arch/sparc64 | |
parent | 74ae998772041b62e9ad420d602e4f7dbb182cd6 (diff) | |
download | talos-op-linux-f7c00338cfeef125032aa12aa8ebeacf9e117e81.tar.gz talos-op-linux-f7c00338cfeef125032aa12aa8ebeacf9e117e81.zip |
[SPARC64]: Fix loop termination in mark_kpte_bitmap()
If we were aligned, but didn't have at least 256MB left
to process, we would loop forever.
Thanks to fabbione for the report and testing the fix.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64')
-rw-r--r-- | arch/sparc64/mm/init.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index 5930e87dafbc..9bbd0bf64af0 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c @@ -973,12 +973,15 @@ static void __init mark_kpte_bitmap(unsigned long start, unsigned long end) while (start < end) { long remains; + remains = end - start; + if (remains < size_256MB) + break; + if (start & mask_256MB) { start = (start + size_256MB) & ~mask_256MB; continue; } - remains = end - start; while (remains >= size_256MB) { unsigned long index = start >> shift_256MB; |