|
@@ -185,26 +185,14 @@ int __init numa_add_memblk(int nid, u64 start, u64 end)
|
|
|
return numa_add_memblk_to(nid, start, end, &numa_meminfo);
|
|
|
}
|
|
|
|
|
|
-/* Initialize NODE_DATA for a node on the local memory */
|
|
|
-static void __init setup_node_data(int nid, u64 start, u64 end)
|
|
|
+/* Allocate NODE_DATA for a node on the local memory */
|
|
|
+static void __init alloc_node_data(int nid)
|
|
|
{
|
|
|
const size_t nd_size = roundup(sizeof(pg_data_t), PAGE_SIZE);
|
|
|
u64 nd_pa;
|
|
|
void *nd;
|
|
|
int tnid;
|
|
|
|
|
|
- /*
|
|
|
- * Don't confuse VM with a node that doesn't have the
|
|
|
- * minimum amount of memory:
|
|
|
- */
|
|
|
- if (end && (end - start) < NODE_MIN_SIZE)
|
|
|
- return;
|
|
|
-
|
|
|
- start = roundup(start, ZONE_ALIGN);
|
|
|
-
|
|
|
- printk(KERN_INFO "Initmem setup node %d [mem %#010Lx-%#010Lx]\n",
|
|
|
- nid, start, end - 1);
|
|
|
-
|
|
|
/*
|
|
|
* Allocate node data. Try node-local memory and then any node.
|
|
|
* Never allocate in DMA zone.
|
|
@@ -222,7 +210,7 @@ static void __init setup_node_data(int nid, u64 start, u64 end)
|
|
|
nd = __va(nd_pa);
|
|
|
|
|
|
/* report and initialize */
|
|
|
- printk(KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]\n",
|
|
|
+ printk(KERN_INFO "NODE_DATA(%d) allocated [mem %#010Lx-%#010Lx]\n", nid,
|
|
|
nd_pa, nd_pa + nd_size - 1);
|
|
|
tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT);
|
|
|
if (tnid != nid)
|
|
@@ -230,9 +218,6 @@ static void __init setup_node_data(int nid, u64 start, u64 end)
|
|
|
|
|
|
node_data[nid] = nd;
|
|
|
memset(NODE_DATA(nid), 0, sizeof(pg_data_t));
|
|
|
- NODE_DATA(nid)->node_id = nid;
|
|
|
- NODE_DATA(nid)->node_start_pfn = start >> PAGE_SHIFT;
|
|
|
- NODE_DATA(nid)->node_spanned_pages = (end - start) >> PAGE_SHIFT;
|
|
|
|
|
|
node_set_online(nid);
|
|
|
}
|
|
@@ -523,8 +508,17 @@ static int __init numa_register_memblks(struct numa_meminfo *mi)
|
|
|
end = max(mi->blk[i].end, end);
|
|
|
}
|
|
|
|
|
|
- if (start < end)
|
|
|
- setup_node_data(nid, start, end);
|
|
|
+ if (start >= end)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Don't confuse VM with a node that doesn't have the
|
|
|
+ * minimum amount of memory:
|
|
|
+ */
|
|
|
+ if (end && (end - start) < NODE_MIN_SIZE)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ alloc_node_data(nid);
|
|
|
}
|
|
|
|
|
|
/* Dump memblock with node info and return. */
|