diff options
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/kernel/smpboot.c | 5 | ||||
-rw-r--r-- | arch/i386/kernel/srat.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c index 020d873b7d21..82b26d5ce476 100644 --- a/arch/i386/kernel/smpboot.c +++ b/arch/i386/kernel/smpboot.c | |||
@@ -102,6 +102,8 @@ u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly = | |||
102 | { [0 ... NR_CPUS-1] = 0xff }; | 102 | { [0 ... NR_CPUS-1] = 0xff }; |
103 | EXPORT_SYMBOL(x86_cpu_to_apicid); | 103 | EXPORT_SYMBOL(x86_cpu_to_apicid); |
104 | 104 | ||
105 | u8 apicid_2_node[MAX_APICID]; | ||
106 | |||
105 | /* | 107 | /* |
106 | * Trampoline 80x86 program as an array. | 108 | * Trampoline 80x86 program as an array. |
107 | */ | 109 | */ |
@@ -645,7 +647,7 @@ static void map_cpu_to_logical_apicid(void) | |||
645 | { | 647 | { |
646 | int cpu = smp_processor_id(); | 648 | int cpu = smp_processor_id(); |
647 | int apicid = logical_smp_processor_id(); | 649 | int apicid = logical_smp_processor_id(); |
648 | int node = apicid_to_node(apicid); | 650 | int node = apicid_to_node(hard_smp_processor_id()); |
649 | 651 | ||
650 | if (!node_online(node)) | 652 | if (!node_online(node)) |
651 | node = first_online_node; | 653 | node = first_online_node; |
@@ -954,6 +956,7 @@ static int __devinit do_boot_cpu(int apicid, int cpu) | |||
954 | 956 | ||
955 | irq_ctx_init(cpu); | 957 | irq_ctx_init(cpu); |
956 | 958 | ||
959 | x86_cpu_to_apicid[cpu] = apicid; | ||
957 | /* | 960 | /* |
958 | * This grunge runs the startup process for | 961 | * This grunge runs the startup process for |
959 | * the targeted processor. | 962 | * the targeted processor. |
diff --git a/arch/i386/kernel/srat.c b/arch/i386/kernel/srat.c index 32413122c4c2..f7e735c077c3 100644 --- a/arch/i386/kernel/srat.c +++ b/arch/i386/kernel/srat.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/nodemask.h> | 30 | #include <linux/nodemask.h> |
31 | #include <asm/srat.h> | 31 | #include <asm/srat.h> |
32 | #include <asm/topology.h> | 32 | #include <asm/topology.h> |
33 | #include <asm/smp.h> | ||
33 | 34 | ||
34 | /* | 35 | /* |
35 | * proximity macros and definitions | 36 | * proximity macros and definitions |
@@ -54,6 +55,7 @@ struct node_memory_chunk_s { | |||
54 | static struct node_memory_chunk_s node_memory_chunk[MAXCHUNKS]; | 55 | static struct node_memory_chunk_s node_memory_chunk[MAXCHUNKS]; |
55 | 56 | ||
56 | static int num_memory_chunks; /* total number of memory chunks */ | 57 | static int num_memory_chunks; /* total number of memory chunks */ |
58 | static u8 __initdata apicid_to_pxm[MAX_APICID]; | ||
57 | 59 | ||
58 | extern void * boot_ioremap(unsigned long, unsigned long); | 60 | extern void * boot_ioremap(unsigned long, unsigned long); |
59 | 61 | ||
@@ -69,6 +71,8 @@ static void __init parse_cpu_affinity_structure(char *p) | |||
69 | /* mark this node as "seen" in node bitmap */ | 71 | /* mark this node as "seen" in node bitmap */ |
70 | BMAP_SET(pxm_bitmap, cpu_affinity->proximity_domain); | 72 | BMAP_SET(pxm_bitmap, cpu_affinity->proximity_domain); |
71 | 73 | ||
74 | apicid_to_pxm[cpu_affinity->apic_id] = cpu_affinity->proximity_domain; | ||
75 | |||
72 | printk("CPU 0x%02X in proximity domain 0x%02X\n", | 76 | printk("CPU 0x%02X in proximity domain 0x%02X\n", |
73 | cpu_affinity->apic_id, cpu_affinity->proximity_domain); | 77 | cpu_affinity->apic_id, cpu_affinity->proximity_domain); |
74 | } | 78 | } |
@@ -235,6 +239,9 @@ static int __init acpi20_parse_srat(struct acpi_table_srat *sratp) | |||
235 | printk("Number of logical nodes in system = %d\n", num_online_nodes()); | 239 | printk("Number of logical nodes in system = %d\n", num_online_nodes()); |
236 | printk("Number of memory chunks in system = %d\n", num_memory_chunks); | 240 | printk("Number of memory chunks in system = %d\n", num_memory_chunks); |
237 | 241 | ||
242 | for (i = 0; i < MAX_APICID; i++) | ||
243 | apicid_2_node[i] = pxm_to_node(apicid_to_pxm[i]); | ||
244 | |||
238 | for (j = 0; j < num_memory_chunks; j++){ | 245 | for (j = 0; j < num_memory_chunks; j++){ |
239 | struct node_memory_chunk_s * chunk = &node_memory_chunk[j]; | 246 | struct node_memory_chunk_s * chunk = &node_memory_chunk[j]; |
240 | printk("chunk %d nid %d start_pfn %08lx end_pfn %08lx\n", | 247 | printk("chunk %d nid %d start_pfn %08lx end_pfn %08lx\n", |