diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c
index 5930e87dafbc32e2e0f76abf6299de38def0416e..9bbd0bf64af0f44fabfc1f2857256f71b7556a5f 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;