Browse Source

[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>
David S. Miller 19 years ago
parent
commit
f7c00338cf
1 changed files with 4 additions and 1 deletions
  1. 4 1
      arch/sparc64/mm/init.c

+ 4 - 1
arch/sparc64/mm/init.c

@@ -973,12 +973,15 @@ static void __init mark_kpte_bitmap(unsigned long start, unsigned long end)
 	while (start < end) {
 	while (start < end) {
 		long remains;
 		long remains;
 
 
+		remains = end - start;
+		if (remains < size_256MB)
+			break;
+
 		if (start & mask_256MB) {
 		if (start & mask_256MB) {
 			start = (start + size_256MB) & ~mask_256MB;
 			start = (start + size_256MB) & ~mask_256MB;
 			continue;
 			continue;
 		}
 		}
 
 
-		remains = end - start;
 		while (remains >= size_256MB) {
 		while (remains >= size_256MB) {
 			unsigned long index = start >> shift_256MB;
 			unsigned long index = start >> shift_256MB;