Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=08705b89ecb0f4b0ba5735630ef988bd9fd9dd95
Commit:     08705b89ecb0f4b0ba5735630ef988bd9fd9dd95
Parent:     3484d79813707bb6045773953a809abba443dc20
Author:     David Rientjes <[EMAIL PROTECTED]>
AuthorDate: Sat Jul 21 17:10:33 2007 +0200
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sat Jul 21 18:37:10 2007 -0700

    x86_64: fake apicid_to_node mapping for fake numa
    
    When we are in the emulated NUMA case, we need to make sure that all 
existing
    apicid_to_node mappings that point to real node ID's now point to the
    equivalent fake node ID's.
    
    If we simply iterate over all apicid_to_node[] members for each node, we 
risk
    remapping an entry if it shares a node ID with a real node.  Since apicid's
    may not be consecutive, we're forced to create an automatic array of
    apicid_to_node mappings and then copy it over once we have finished 
remapping
    fake to real nodes.
    
    Signed-off-by: David Rientjes <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/x86_64/mm/srat.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c
index 7ac8ff3..acdf03e 100644
--- a/arch/x86_64/mm/srat.c
+++ b/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++)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to