From 7714524a4d3651e355ccd3186d8d2e7bfbe0c35f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 21 Jan 2012 10:03:46 -0500 Subject: [PATCH] 3.2-stable patches added patches: acpi-ia64-use-srat-table-rev-to-use-8bit-or-16-32bit-pxm-fields-ia64.patch acpi-store-srat-table-revision.patch acpi-x86-use-srat-table-rev-to-use-8bit-or-32bit-pxm-fields-x86-x86-64.patch --- ...use-8bit-or-16-32bit-pxm-fields-ia64.patch | 63 +++++++++++++++++++ .../acpi-store-srat-table-revision.patch | 62 ++++++++++++++++++ ...-8bit-or-32bit-pxm-fields-x86-x86-64.patch | 47 ++++++++++++++ queue-3.2/series | 3 + 4 files changed, 175 insertions(+) create mode 100644 queue-3.2/acpi-ia64-use-srat-table-rev-to-use-8bit-or-16-32bit-pxm-fields-ia64.patch create mode 100644 queue-3.2/acpi-store-srat-table-revision.patch create mode 100644 queue-3.2/acpi-x86-use-srat-table-rev-to-use-8bit-or-32bit-pxm-fields-x86-x86-64.patch diff --git a/queue-3.2/acpi-ia64-use-srat-table-rev-to-use-8bit-or-16-32bit-pxm-fields-ia64.patch b/queue-3.2/acpi-ia64-use-srat-table-rev-to-use-8bit-or-16-32bit-pxm-fields-ia64.patch new file mode 100644 index 00000000000..a0340aa5a97 --- /dev/null +++ b/queue-3.2/acpi-ia64-use-srat-table-rev-to-use-8bit-or-16-32bit-pxm-fields-ia64.patch @@ -0,0 +1,63 @@ +From 9f10f6a520deb3639fac78d81151a3ade88b4e7f Mon Sep 17 00:00:00 2001 +From: Kurt Garloff +Date: Tue, 17 Jan 2012 04:21:49 -0500 +Subject: ACPI, ia64: Use SRAT table rev to use 8bit or 16/32bit PXM fields (ia64) + +From: Kurt Garloff + +commit 9f10f6a520deb3639fac78d81151a3ade88b4e7f upstream. + +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 +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + arch/ia64/kernel/acpi.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +--- a/arch/ia64/kernel/acpi.c ++++ b/arch/ia64/kernel/acpi.c +@@ -429,22 +429,24 @@ static u32 __devinitdata pxm_flag[PXM_FL + static struct acpi_table_slit __initdata *slit_table; + cpumask_t early_cpu_possible_map = CPU_MASK_NONE; + +-static int get_processor_proximity_domain(struct acpi_srat_cpu_affinity *pa) ++static int __init ++get_processor_proximity_domain(struct acpi_srat_cpu_affinity *pa) + { + int pxm; + + pxm = pa->proximity_domain_lo; +- if (ia64_platform_is("sn2")) ++ if (ia64_platform_is("sn2") || acpi_srat_revision >= 2) + pxm += pa->proximity_domain_hi[0] << 8; + return pxm; + } + +-static int get_memory_proximity_domain(struct acpi_srat_mem_affinity *ma) ++static int __init ++get_memory_proximity_domain(struct acpi_srat_mem_affinity *ma) + { + int pxm; + + pxm = ma->proximity_domain; +- if (!ia64_platform_is("sn2")) ++ if (!ia64_platform_is("sn2") && acpi_srat_revision <= 1) + pxm &= 0xff; + + return pxm; diff --git a/queue-3.2/acpi-store-srat-table-revision.patch b/queue-3.2/acpi-store-srat-table-revision.patch new file mode 100644 index 00000000000..2852ecea19e --- /dev/null +++ b/queue-3.2/acpi-store-srat-table-revision.patch @@ -0,0 +1,62 @@ +From 8df0eb7c9d96f9e82f233ee8b74e0f0c8471f868 Mon Sep 17 00:00:00 2001 +From: Kurt Garloff +Date: Tue, 17 Jan 2012 04:18:02 -0500 +Subject: ACPI: Store SRAT table revision + +From: Kurt Garloff + +commit 8df0eb7c9d96f9e82f233ee8b74e0f0c8471f868 upstream. + +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. +In order to know whether or not, we must know what version the SRAT +table has. + +This patch stores the SRAT table revision for later consumption +by arch specific __init functions. + +Signed-off-by: Kurt Garloff +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/numa.c | 6 ++++++ + include/acpi/acpi_numa.h | 1 + + 2 files changed, 7 insertions(+) + +--- a/drivers/acpi/numa.c ++++ b/drivers/acpi/numa.c +@@ -45,6 +45,8 @@ static int pxm_to_node_map[MAX_PXM_DOMAI + static int node_to_pxm_map[MAX_NUMNODES] + = { [0 ... MAX_NUMNODES - 1] = PXM_INVAL }; + ++unsigned char acpi_srat_revision __initdata; ++ + int pxm_to_node(int pxm) + { + if (pxm < 0) +@@ -255,9 +257,13 @@ acpi_parse_memory_affinity(struct acpi_s + + static int __init acpi_parse_srat(struct acpi_table_header *table) + { ++ struct acpi_table_srat *srat; + if (!table) + return -EINVAL; + ++ srat = (struct acpi_table_srat *)table; ++ acpi_srat_revision = srat->header.revision; ++ + /* Real work done in acpi_table_parse_srat below. */ + + return 0; +--- a/include/acpi/acpi_numa.h ++++ b/include/acpi/acpi_numa.h +@@ -15,6 +15,7 @@ extern int pxm_to_node(int); + extern int node_to_pxm(int); + extern void __acpi_map_pxm_to_node(int, int); + extern int acpi_map_pxm_to_node(int); ++extern unsigned char acpi_srat_revision; + + #endif /* CONFIG_ACPI_NUMA */ + #endif /* __ACP_NUMA_H */ diff --git a/queue-3.2/acpi-x86-use-srat-table-rev-to-use-8bit-or-32bit-pxm-fields-x86-x86-64.patch b/queue-3.2/acpi-x86-use-srat-table-rev-to-use-8bit-or-32bit-pxm-fields-x86-x86-64.patch new file mode 100644 index 00000000000..4bf614214bf --- /dev/null +++ b/queue-3.2/acpi-x86-use-srat-table-rev-to-use-8bit-or-32bit-pxm-fields-x86-x86-64.patch @@ -0,0 +1,47 @@ +From cd298f60a2451a16e0f077404bf69b62ec868733 Mon Sep 17 00:00:00 2001 +From: Kurt Garloff +Date: Tue, 17 Jan 2012 04:20:31 -0500 +Subject: ACPI, x86: Use SRAT table rev to use 8bit or 32bit PXM fields (x86/x86-64) + +From: Kurt Garloff + +commit cd298f60a2451a16e0f077404bf69b62ec868733 upstream. + +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. + +x86/x86-64 was rather inconsistent prior to this patch; it used 8 bits +for the pxm field in cpu_affinity, but 32 bits in mem_affinity. +This patch makes it consistent: Either use 8 bits consistently (SRAT +rev 1 or lower) or 32 bits (SRAT rev 2 or higher). + +cc: x86@kernel.org +Signed-off-by: Kurt Garloff +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/mm/srat.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/arch/x86/mm/srat.c ++++ b/arch/x86/mm/srat.c +@@ -104,6 +104,8 @@ acpi_numa_processor_affinity_init(struct + if ((pa->flags & ACPI_SRAT_CPU_ENABLED) == 0) + return; + pxm = pa->proximity_domain_lo; ++ if (acpi_srat_revision >= 2) ++ pxm |= *((unsigned int*)pa->proximity_domain_hi) << 8; + node = setup_node(pxm); + if (node < 0) { + printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm); +@@ -155,6 +157,8 @@ acpi_numa_memory_affinity_init(struct ac + start = ma->base_address; + end = start + ma->length; + pxm = ma->proximity_domain; ++ if (acpi_srat_revision <= 1) ++ pxm &= 0xff; + node = setup_node(pxm); + if (node < 0) { + printk(KERN_ERR "SRAT: Too many proximity domains.\n"); diff --git a/queue-3.2/series b/queue-3.2/series index c96534a6ff9..4b6bf68d7ba 100644 --- a/queue-3.2/series +++ b/queue-3.2/series @@ -97,3 +97,6 @@ alsa-hda-fix-internal-microphone-on-dell-studio-16-xps-1645.patch tomoyo-accept-000-as-a-valid-character.patch intel-idle-make-idle-driver-more-robust.patch intel_idle-fix-api-misuse.patch +acpi-store-srat-table-revision.patch +acpi-x86-use-srat-table-rev-to-use-8bit-or-32bit-pxm-fields-x86-x86-64.patch +acpi-ia64-use-srat-table-rev-to-use-8bit-or-16-32bit-pxm-fields-ia64.patch -- 2.47.3