Thread (31 messages) 31 messages, 9 authors, 2016-08-16

[PATCH v7 15/15] acpi, numa: Enable ACPI based NUMA on ARM64

From: guohanjun@huawei.com (Hanjun Guo)
Date: 2016-06-17 02:08:09
Also in: linux-acpi, lkml

On 2016/6/10 3:47, Matthias Brugger wrote:

On 25/05/16 00:35, David Daney wrote:
quoted
From: Hanjun Guo <redacted>

Add function needed for cpu to node mapping, and enable ACPI based
NUMA for ARM64 in Kconfig

Signed-off-by: Hanjun Guo <redacted>
Signed-off-by: Robert Richter <redacted>
[david.daney at cavium.com added ACPI_NUMA default to y for ARM64]
Signed-off-by: David Daney <redacted>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
---
  drivers/acpi/Kconfig |  4 ++--
  drivers/acpi/numa.c  | 37 ++++++++++++++++++++++++++++++++++++-
  include/linux/acpi.h | 17 ++++++++++++++++-
  3 files changed, 54 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index b7e2e77..dd76b36 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -291,8 +291,8 @@ config ACPI_THERMAL
  config ACPI_NUMA
      bool "NUMA support"
      depends on NUMA
-    depends on (X86 || IA64)
-    default y if IA64_GENERIC || IA64_SGI_SN2
+    depends on (X86 || IA64 || ARM64)
+    default y if IA64_GENERIC || IA64_SGI_SN2 || ARM64

  config ACPI_CUSTOM_DSDT_FILE
      string "Custom DSDT Table file to include"
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
index fad6d28..9b7ce40 100644
--- a/drivers/acpi/numa.c
+++ b/drivers/acpi/numa.c
@@ -170,6 +170,18 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
          }
          break;

+    case ACPI_SRAT_TYPE_GICC_AFFINITY:
+        {
+            struct acpi_srat_gicc_affinity *p =
+                (struct acpi_srat_gicc_affinity *)header;
+            pr_debug("SRAT Processor (acpi id[0x%04x]) in proximity domain %d %s\n",
+                 p->acpi_processor_uid,
+                 p->proximity_domain,
+                 (p->flags & ACPI_SRAT_GICC_ENABLED) ?
+                 "enabled" : "disabled");
+        }
+        break;
+
      default:
          pr_warn("Found unsupported SRAT entry (type = 0x%x)\n",
              header->type);
@@ -360,6 +372,24 @@ acpi_parse_processor_affinity(struct acpi_subtable_header *header,
      return 0;
  }

+static int __init
+acpi_parse_gicc_affinity(struct acpi_subtable_header *header,
+             const unsigned long end)
+{
+    struct acpi_srat_gicc_affinity *processor_affinity;
+
+    processor_affinity = (struct acpi_srat_gicc_affinity *)header;
+    if (!processor_affinity)
+        return -EINVAL;
+
+    acpi_table_print_srat_entry(header);
+
+    /* let architecture-dependent part to do it */
+    acpi_numa_gicc_affinity_init(processor_affinity);
+
+    return 0;
+}
+
  static int __initdata parsed_numa_memblks;

  static int __init
@@ -404,6 +434,9 @@ int __init acpi_numa_init(void)
  {
      int cnt = 0;

+    if (acpi_disabled)
+        return -EINVAL;
+
      /*
       * Should not limit number with cpu num that is from NR_CPUS or nr_cpus=
       * SRAT cpu entries could have different order with that in MADT.
@@ -412,13 +445,15 @@ int __init acpi_numa_init(void)

      /* SRAT: Static Resource Affinity Table */
      if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
-        struct acpi_subtable_proc srat_proc[2];
+        struct acpi_subtable_proc srat_proc[3];

          memset(srat_proc, 0, sizeof(srat_proc));
          srat_proc[0].id = ACPI_SRAT_TYPE_CPU_AFFINITY;
          srat_proc[0].handler = acpi_parse_processor_affinity;
          srat_proc[1].id = ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY;
          srat_proc[1].handler = acpi_parse_x2apic_affinity;
+        srat_proc[1].id = ACPI_SRAT_TYPE_GICC_AFFINITY;
+        srat_proc[1].handler = acpi_parse_gicc_affinity;
Should be srat_proc[2].id and srat_proc[2].handler, right?
Good catch, will send a updated version shortly.

Thanks
Hanjun
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help