vserver 1.9.5.x5
[linux-2.6.git] / arch / i386 / kernel / numaq.c
index a3e650b..0ee22fc 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/bootmem.h>
 #include <linux/mmzone.h>
 #include <linux/module.h>
+#include <linux/nodemask.h>
 #include <asm/numaq.h>
 
 /* These are needed before the pgdat's are created */
@@ -39,8 +40,7 @@ extern long node_start_pfn[], node_end_pfn[];
  * Function: smp_dump_qct()
  *
  * Description: gets memory layout from the quad config table.  This
- * function also increments numnodes with the number of nodes (quads)
- * present.
+ * function also updates node_online_map with the nodes (quads) present.
  */
 static void __init smp_dump_qct(void)
 {
@@ -49,11 +49,10 @@ static void __init smp_dump_qct(void)
        struct sys_cfg_data *scd =
                (struct sys_cfg_data *)__va(SYS_CFG_DATA_PRIV_ADDR);
 
-       numnodes = 0;
-       for(node = 0; node < MAX_NUMNODES; node++) {
-               if(scd->quads_present31_0 & (1 << node)) {
+       nodes_clear(node_online_map);
+       for_each_node(node) {
+               if (scd->quads_present31_0 & (1 << node)) {
                        node_set_online(node);
-                       numnodes++;
                        eq = &scd->eq[node];
                        /* Convert to pages */
                        node_start_pfn[node] = MB_TO_PAGES(
@@ -64,41 +63,6 @@ static void __init smp_dump_qct(void)
        }
 }
 
-/*
- * for each node mark the regions
- *        TOPOFMEM = hi_shrd_mem_start + hi_shrd_mem_size
- *
- * need to be very careful to not mark 1024+ as belonging
- * to node 0. will want 1027 to show as belonging to node 1
- * example:
- *  TOPOFMEM = 1024
- * 1024 >> 8 = 4 (subtract 1 for starting at 0]
- * tmpvar = TOPOFMEM - 256 = 768
- * 1024 >> 8 = 4 (subtract 1 for starting at 0]
- * 
- */
-static void __init initialize_physnode_map(void)
-{
-       int nid;
-       unsigned int topofmem, cur;
-       struct eachquadmem *eq;
-       struct sys_cfg_data *scd =
-               (struct sys_cfg_data *)__va(SYS_CFG_DATA_PRIV_ADDR);
-
-       
-       for(nid = 0; nid < numnodes; nid++) {
-               if(scd->quads_present31_0 & (1 << nid)) {
-                       eq = &scd->eq[nid];
-                       cur = eq->hi_shrd_mem_start;
-                       topofmem = eq->hi_shrd_mem_start + eq->hi_shrd_mem_size;
-                       while (cur < topofmem) {
-                               physnode_map[cur >> 8] = nid;
-                               cur ++;
-                       }
-               }
-       }
-}
-
 /*
  * Unlike Summit, we don't really care to let the NUMA-Q
  * fall back to flat mode.  Don't compile for NUMA-Q
@@ -107,6 +71,5 @@ static void __init initialize_physnode_map(void)
 int __init get_memcfg_numaq(void)
 {
        smp_dump_qct();
-       initialize_physnode_map();
        return 1;
 }