From 37ebdb960b897a5817eeba2de73c2162c78e719b Mon Sep 17 00:00:00 2001 From: David Rientjes Date: Sat, 21 Jul 2007 17:10:33 +0200 Subject: [PATCH] --- yaml --- r: 62389 b: refs/heads/master c: 08705b89ecb0f4b0ba5735630ef988bd9fd9dd95 h: refs/heads/master i: 62387: 55d5e50e5df2b75c4e9d3978d029b33597faea0d v: v3 --- [refs] | 2 +- trunk/arch/x86_64/mm/srat.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index a13d854b7948..49b278144627 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3484d79813707bb6045773953a809abba443dc20 +refs/heads/master: 08705b89ecb0f4b0ba5735630ef988bd9fd9dd95 diff --git a/trunk/arch/x86_64/mm/srat.c b/trunk/arch/x86_64/mm/srat.c index 7ac8ff333e84..acdf03e19146 100644 --- a/trunk/arch/x86_64/mm/srat.c +++ b/trunk/arch/x86_64/mm/srat.c @@ -470,10 +470,13 @@ static int __init find_node_by_addr(unsigned long addr) */ void __init acpi_fake_nodes(const struct bootnode *fake_nodes, int num_nodes) { - int i; + int i, j; int fake_node_to_pxm_map[MAX_NUMNODES] = { [0 ... MAX_NUMNODES-1] = PXM_INVAL }; + unsigned char fake_apicid_to_node[MAX_LOCAL_APIC] = { + [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE + }; printk(KERN_INFO "Faking PXM affinity for fake nodes on real " "topology.\n"); @@ -487,9 +490,17 @@ void __init acpi_fake_nodes(const struct bootnode *fake_nodes, int num_nodes) if (pxm == PXM_INVAL) continue; fake_node_to_pxm_map[i] = pxm; + /* + * For each apicid_to_node mapping that exists for this real + * node, it must now point to the fake node ID. + */ + for (j = 0; j < MAX_LOCAL_APIC; j++) + if (apicid_to_node[j] == nid) + fake_apicid_to_node[j] = i; } for (i = 0; i < num_nodes; i++) __acpi_map_pxm_to_node(fake_node_to_pxm_map[i], i); + memcpy(apicid_to_node, fake_apicid_to_node, sizeof(apicid_to_node)); nodes_clear(nodes_parsed); for (i = 0; i < num_nodes; i++)