linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / alpha / mm / numa.c
index 70362f4..6d52512 100644 (file)
@@ -246,7 +246,7 @@ setup_memory_node(int nid, void *kernel_end)
        reserve_bootmem_node(NODE_DATA(nid), PFN_PHYS(bootmap_start), bootmap_size);
        printk(" reserving pages %ld:%ld\n", bootmap_start, bootmap_start+PFN_UP(bootmap_size));
 
-       numnodes++;
+       node_set_online(nid);
 }
 
 void __init
@@ -256,7 +256,7 @@ setup_memory(void *kernel_end)
 
        show_mem_layout();
 
-       numnodes = 0;
+       nodes_clear(node_online_map);
 
        min_low_pfn = ~0UL;
        max_low_pfn = 0UL;
@@ -279,8 +279,8 @@ setup_memory(void *kernel_end)
                                       initrd_end,
                                       phys_to_virt(PFN_PHYS(max_low_pfn)));
                } else {
-                       nid = NODE_DATA(kvaddr_to_nid(initrd_start));
-                       reserve_bootmem_node(nid,
+                       nid = kvaddr_to_nid(initrd_start);
+                       reserve_bootmem_node(NODE_DATA(nid),
                                             virt_to_phys((void *)initrd_start),
                                             INITRD_SIZE);
                }
@@ -303,7 +303,7 @@ void __init paging_init(void)
         */
        dma_local_pfn = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
 
-       for (nid = 0; nid < numnodes; nid++) {
+       for_each_online_node(nid) {
                unsigned long start_pfn = node_bdata[nid].node_boot_start >> PAGE_SHIFT;
                unsigned long end_pfn = node_bdata[nid].node_low_pfn;
 
@@ -313,7 +313,7 @@ void __init paging_init(void)
                        zones_size[ZONE_DMA] = dma_local_pfn;
                        zones_size[ZONE_NORMAL] = (end_pfn - start_pfn) - dma_local_pfn;
                }
-               free_area_init_node(nid, NODE_DATA(nid), NULL, zones_size, start_pfn, NULL);
+               free_area_init_node(nid, NODE_DATA(nid), zones_size, start_pfn, NULL);
        }
 
        /* Initialize the kernel's ZERO_PGE. */
@@ -327,21 +327,19 @@ void __init mem_init(void)
        extern char _text, _etext, _data, _edata;
        extern char __init_begin, __init_end;
        unsigned long nid, i;
-       struct page * lmem_map;
-
        high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
        reservedpages = 0;
-       for (nid = 0; nid < numnodes; nid++) {
+       for_each_online_node(nid) {
                /*
                 * This will free up the bootmem, ie, slot 0 memory
                 */
                totalram_pages += free_all_bootmem_node(NODE_DATA(nid));
 
-               lmem_map = node_mem_map(nid);
                pfn = NODE_DATA(nid)->node_start_pfn;
                for (i = 0; i < node_spanned_pages(nid); i++, pfn++)
-                       if (page_is_ram(pfn) && PageReserved(lmem_map+i))
+                       if (page_is_ram(pfn) &&
+                           PageReserved(nid_page_nr(nid, i)))
                                reservedpages++;
        }
 
@@ -371,21 +369,24 @@ show_mem(void)
 
        printk("\nMem-info:\n");
        show_free_areas();
-       printk("Free swap:       %6dkB\n",nr_swap_pages<<(PAGE_SHIFT-10));
-       for (nid = 0; nid < numnodes; nid++) {
-               struct page * lmem_map = node_mem_map(nid);
+       printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
+       for_each_online_node(nid) {
+               unsigned long flags;
+               pgdat_resize_lock(NODE_DATA(nid), &flags);
                i = node_spanned_pages(nid);
                while (i-- > 0) {
+                       struct page *page = nid_page_nr(nid, i);
                        total++;
-                       if (PageReserved(lmem_map+i))
+                       if (PageReserved(page))
                                reserved++;
-                       else if (PageSwapCache(lmem_map+i))
+                       else if (PageSwapCache(page))
                                cached++;
-                       else if (!page_count(lmem_map+i))
+                       else if (!page_count(page))
                                free++;
                        else
-                               shared += atomic_read(&lmem_map[i].count) - 1;
+                               shared += page_count(page) - 1;
                }
+               pgdat_resize_unlock(NODE_DATA(nid), &flags);
        }
        printk("%ld pages of RAM\n",total);
        printk("%ld free pages\n",free);