static int __init add_boot_memory_block(unsigned long base_section_nr)
 {
-       int section_count = 0;
        unsigned long nr;
 
-       for (nr = base_section_nr; nr < base_section_nr + sections_per_block;
-            nr++)
-               if (present_section_nr(nr))
-                       section_count++;
+       for_each_present_section_nr(base_section_nr, nr) {
+               if (nr >= (base_section_nr + sections_per_block))
+                       break;
 
-       if (section_count == 0)
-               return 0;
-       return add_memory_block(memory_block_id(base_section_nr),
-                               MEM_ONLINE, NULL,  NULL);
+               return add_memory_block(memory_block_id(base_section_nr),
+                                       MEM_ONLINE, NULL, NULL);
+       }
+
+       return 0;
 }
 
 static int add_hotplug_memory_block(unsigned long block_id,
 
        return -1;
 }
 
+#define for_each_present_section_nr(start, section_nr)         \
+       for (section_nr = next_present_section_nr(start - 1);   \
+            section_nr != -1;                                  \
+            section_nr = next_present_section_nr(section_nr))
+
 /*
  * These are _only_ used during initialisation, therefore they
  * can use __initdata ...  They could have names to indicate
 
        ms->section_mem_map |= SECTION_MARKED_PRESENT;
 }
 
-#define for_each_present_section_nr(start, section_nr)         \
-       for (section_nr = next_present_section_nr(start-1);     \
-            section_nr != -1;                                                          \
-            section_nr = next_present_section_nr(section_nr))
-
 static inline unsigned long first_present_section_nr(void)
 {
        return next_present_section_nr(-1);