jb 10b
 1:
        movl %edi,pa(init_pg_tables_end)
+       shrl $12, %eax
+       movl %eax, pa(max_pfn_mapped)
 
        /* Do early initialization of the fixmap area */
        movl $pa(swapper_pg_fixmap)+PDE_ATTR,%eax
        cmpl %ebp,%eax
        jb 10b
        movl %edi,pa(init_pg_tables_end)
+       shrl $12, %eax
+       movl %eax, pa(max_pfn_mapped)
 
        /* Do early initialization of the fixmap area */
        movl $pa(swapper_pg_fixmap)+PDE_ATTR,%eax
 
         */
        bootmap_size = bootmem_bootmap_pages(max_low_pfn)<<PAGE_SHIFT;
        bootmap = find_e820_area(min_low_pfn<<PAGE_SHIFT,
-                                max_low_pfn<<PAGE_SHIFT, bootmap_size,
+                                max_pfn_mapped<<PAGE_SHIFT, bootmap_size,
                                 PAGE_SIZE);
        if (bootmap == -1L)
                panic("Cannot find bootmem map of size %ld\n", bootmap_size);
        reserve_initrd();
 #endif
        bootmap_size = init_bootmem(bootmap >> PAGE_SHIFT, max_low_pfn);
+       printk(KERN_INFO "  mapped low ram: 0 - %08lx\n",
+                max_pfn_mapped<<PAGE_SHIFT);
        printk(KERN_INFO "  low ram: %08lx - %08lx\n",
                 min_low_pfn<<PAGE_SHIFT, max_low_pfn<<PAGE_SHIFT);
        printk(KERN_INFO "  bootmap %08lx - %08lx\n",
 
        else {
                unsigned long pgdat_phys;
                pgdat_phys = find_e820_area(min_low_pfn<<PAGE_SHIFT,
-                                max_low_pfn<<PAGE_SHIFT, sizeof(pg_data_t),
+                                (nid ? max_low_pfn:max_pfn_mapped)<<PAGE_SHIFT,
+                                sizeof(pg_data_t),
                                 PAGE_SIZE);
                NODE_DATA(nid) = (pg_data_t *)(pfn_to_kaddr(pgdat_phys>>PAGE_SHIFT));
                reserve_early(pgdat_phys, pgdat_phys + sizeof(pg_data_t),