static nodemask_t memory_nodes_parsed __initdata;
static nodemask_t processor_nodes_parsed __initdata;
-static nodemask_t nodes_found __initdata;
static struct node nodes[MAX_NUMNODES] __initdata;
struct pxm2node {
return NUMA_NO_NODE;
}
-__devinit nodeid_t setup_node(unsigned pxm)
+nodeid_t setup_node(unsigned pxm)
{
nodeid_t node;
unsigned idx;
static bool_t warned;
+ static unsigned nodes_found;
BUILD_BUG_ON(MAX_NUMNODES >= NUMA_NO_NODE);
goto finish;
if (!warned) {
- printk(XENLOG_WARNING "More PXMs than available nodes\n");
+ printk(KERN_WARNING "SRAT: Too many proximity domains (%#x)\n",
+ pxm);
warned = 1;
}
return NUMA_NO_NODE;
finish:
- node = first_unset_node(nodes_found);
- node_set(node, nodes_found);
+ node = nodes_found++;
+ if (node >= MAX_NUMNODES)
+ return NUMA_NO_NODE;
pxm2node[idx].pxm = pxm;
pxm2node[idx].node = node;
pxm = pa->proximity_domain;
node = setup_node(pxm);
if (node == NUMA_NO_NODE) {
- printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm);
bad_srat();
return;
}
}
node = setup_node(pxm);
if (node == NUMA_NO_NODE) {
- printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm);
bad_srat();
return;
}
pxm &= 0xff;
node = setup_node(pxm);
if (node == NUMA_NO_NODE) {
- printk(KERN_ERR "SRAT: Too many proximity domains.\n");
bad_srat();
return;
}
/* Sanity check to catch more bad SRATs (they are amazingly common).
Make sure the PXMs cover all memory. */
-static int nodes_cover_memory(void)
+static int __init nodes_cover_memory(void)
{
int i;