|
@@ -420,6 +420,26 @@ int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS];
|
|
|
int __initdata nid_to_pxm_map[MAX_NUMNODES];
|
|
|
static struct acpi_table_slit __initdata *slit_table;
|
|
|
|
|
|
+static int get_processor_proximity_domain(struct acpi_table_processor_affinity *pa)
|
|
|
+{
|
|
|
+ int pxm;
|
|
|
+
|
|
|
+ pxm = pa->proximity_domain;
|
|
|
+ if (ia64_platform_is("sn2"))
|
|
|
+ pxm += pa->reserved[0] << 8;
|
|
|
+ return pxm;
|
|
|
+}
|
|
|
+
|
|
|
+static int get_memory_proximity_domain(struct acpi_table_memory_affinity *ma)
|
|
|
+{
|
|
|
+ int pxm;
|
|
|
+
|
|
|
+ pxm = ma->proximity_domain;
|
|
|
+ if (ia64_platform_is("sn2"))
|
|
|
+ pxm += ma->reserved1[0] << 8;
|
|
|
+ return pxm;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* ACPI 2.0 SLIT (System Locality Information Table)
|
|
|
* http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf
|
|
@@ -443,16 +463,20 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
|
|
|
void __init
|
|
|
acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa)
|
|
|
{
|
|
|
+ int pxm;
|
|
|
+
|
|
|
if (!pa->flags.enabled)
|
|
|
return;
|
|
|
|
|
|
+ pxm = get_processor_proximity_domain(pa);
|
|
|
+
|
|
|
/* record this node in proximity bitmap */
|
|
|
- pxm_bit_set(pa->proximity_domain);
|
|
|
+ pxm_bit_set(pxm);
|
|
|
|
|
|
node_cpuid[srat_num_cpus].phys_id =
|
|
|
(pa->apic_id << 8) | (pa->lsapic_eid);
|
|
|
/* nid should be overridden as logical node id later */
|
|
|
- node_cpuid[srat_num_cpus].nid = pa->proximity_domain;
|
|
|
+ node_cpuid[srat_num_cpus].nid = pxm;
|
|
|
srat_num_cpus++;
|
|
|
}
|
|
|
|
|
@@ -460,10 +484,10 @@ void __init
|
|
|
acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
|
|
|
{
|
|
|
unsigned long paddr, size;
|
|
|
- u8 pxm;
|
|
|
+ int pxm;
|
|
|
struct node_memblk_s *p, *q, *pend;
|
|
|
|
|
|
- pxm = ma->proximity_domain;
|
|
|
+ pxm = get_memory_proximity_domain(ma);
|
|
|
|
|
|
/* fill node memory chunk structure */
|
|
|
paddr = ma->base_addr_hi;
|