aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorKurt Garloff <kurt@garloff.de>2012-01-17 04:21:49 -0500
committerLen Brown <len.brown@intel.com>2012-01-17 04:21:49 -0500
commit9f10f6a520deb3639fac78d81151a3ade88b4e7f (patch)
tree340cb2afb7578606d60acae3db5290d92b270b30 /arch
parentcd298f60a2451a16e0f077404bf69b62ec868733 (diff)
ACPI, ia64: Use SRAT table rev to use 8bit or 16/32bit PXM fields (ia64)
In SRAT v1, we had 8bit proximity domain (PXM) fields; SRAT v2 provides 32bits for these. The new fields were reserved before. According to the ACPI spec, the OS must disregrard reserved fields. ia64 did handle the PXM fields almost consistently, but depending on sgi's sn2 platform. This patch leaves the sn2 logic in, but does also use 16/32 bits for PXM if the SRAT has rev 2 or higher. The patch also adds __init to the two pxm accessor functions, as they access __initdata now and are called from an __init function only anyway. Note that the code only uses 16 bits for the PXM field in the processor proximity field; the patch does not address this as 16 bits are more than enough. Signed-off-by: Kurt Garloff <kurt@garloff.de> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/kernel/acpi.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index bfb4d01e0e51..5207035dc061 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -429,22 +429,24 @@ static u32 __devinitdata pxm_flag[PXM_FLAG_LEN];
429static struct acpi_table_slit __initdata *slit_table; 429static struct acpi_table_slit __initdata *slit_table;
430cpumask_t early_cpu_possible_map = CPU_MASK_NONE; 430cpumask_t early_cpu_possible_map = CPU_MASK_NONE;
431 431
432static int get_processor_proximity_domain(struct acpi_srat_cpu_affinity *pa) 432static int __init
433get_processor_proximity_domain(struct acpi_srat_cpu_affinity *pa)
433{ 434{
434 int pxm; 435 int pxm;
435 436
436 pxm = pa->proximity_domain_lo; 437 pxm = pa->proximity_domain_lo;
437 if (ia64_platform_is("sn2")) 438 if (ia64_platform_is("sn2") || acpi_srat_revision >= 2)
438 pxm += pa->proximity_domain_hi[0] << 8; 439 pxm += pa->proximity_domain_hi[0] << 8;
439 return pxm; 440 return pxm;
440} 441}
441 442
442static int get_memory_proximity_domain(struct acpi_srat_mem_affinity *ma) 443static int __init
444get_memory_proximity_domain(struct acpi_srat_mem_affinity *ma)
443{ 445{
444 int pxm; 446 int pxm;
445 447
446 pxm = ma->proximity_domain; 448 pxm = ma->proximity_domain;
447 if (!ia64_platform_is("sn2")) 449 if (!ia64_platform_is("sn2") && acpi_srat_revision <= 1)
448 pxm &= 0xff; 450 pxm &= 0xff;
449 451
450 return pxm; 452 return pxm;