]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Kurt Garloff <garloff@suse.de> |
2 | Subject: Use SRAT table rev to use 8bit or 32bit PXM fields (x86-64) | |
3 | References: bnc#503038 | |
4 | ||
5 | In SRAT v1, we had 8bit proximity domain (PXM) fields; SRAT v2 provides | |
6 | 32bits for these. The new fields were reserved before. | |
7 | According to the ACPI spec, the OS must disregrard reserved fields. | |
8 | ||
9 | x86-64 was rather inconsistent prior to this patch; it used 8 bits | |
10 | for the pxm field in cpu_affinity, but 32 bits in mem_affinity. | |
11 | This patch makes it consistent: Either use 8 bits consistently (SRAT | |
12 | rev 1 or lower) or 32 bits (SRAT rev 2 or higher). | |
13 | ||
14 | This is patch 2/3. | |
15 | ||
16 | Signed-off-by: Kurt Garloff <garloff@suse.de> | |
17 | ||
18 | --- | |
19 | arch/x86/mm/srat_64.c | 4 ++++ | |
20 | 1 file changed, 4 insertions(+) | |
21 | ||
22 | --- a/arch/x86/mm/srat_64.c | |
23 | +++ b/arch/x86/mm/srat_64.c | |
24 | @@ -133,6 +133,8 @@ acpi_numa_processor_affinity_init(struct | |
25 | if ((pa->flags & ACPI_SRAT_CPU_ENABLED) == 0) | |
26 | return; | |
27 | pxm = pa->proximity_domain_lo; | |
28 | + if (acpi_srat_revision >= 2) | |
29 | + pxm |= *((unsigned int*)pa->proximity_domain_hi) << 8; | |
30 | node = setup_node(pxm); | |
31 | if (node < 0) { | |
32 | printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm); | |
33 | @@ -243,6 +245,8 @@ acpi_numa_memory_affinity_init(struct ac | |
34 | start = ma->base_address; | |
35 | end = start + ma->length; | |
36 | pxm = ma->proximity_domain; | |
37 | + if (acpi_srat_revision <= 1) | |
38 | + pxm &= 0xff; | |
39 | node = setup_node(pxm); | |
40 | if (node < 0) { | |
41 | printk(KERN_ERR "SRAT: Too many proximity domains.\n"); |