{
        int nid;
        unsigned long system_start_pfn, system_max_low_pfn;
+       unsigned long wasted_pages;
 
        /*
         * When mapping a NUMA machine we allocate the node_mem_map arrays
                kva_start_pfn = PFN_DOWN(initrd_start - PAGE_OFFSET)
                        - kva_pages;
 #endif
-       kva_start_pfn -= kva_start_pfn & (PTRS_PER_PTE-1);
+
+       /*
+        * We waste pages past at the end of the KVA for no good reason other
+        * than how it is located. This is bad.
+        */
+       wasted_pages = kva_start_pfn & (PTRS_PER_PTE-1);
+       kva_start_pfn -= wasted_pages;
+       kva_pages += wasted_pages;
 
        system_max_low_pfn = max_low_pfn = find_max_low_pfn();
        printk("kva_start_pfn ~ %ld find_max_low_pfn() ~ %ld\n",
 
 void __init numa_kva_reserve(void)
 {
-       reserve_bootmem(PFN_PHYS(kva_start_pfn),PFN_PHYS(kva_pages));
+       if (kva_pages)
+               reserve_bootmem(PFN_PHYS(kva_start_pfn), PFN_PHYS(kva_pages));
 }
 
 void __init zone_sizes_init(void)