From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751779AbcFITrp (ORCPT ); Thu, 9 Jun 2016 15:47:45 -0400 Received: from smtp.nue.novell.com ([195.135.221.5]:43690 "EHLO smtp.nue.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751006AbcFITrl (ORCPT ); Thu, 9 Jun 2016 15:47:41 -0400 Subject: Re: [PATCH v7 15/15] acpi, numa: Enable ACPI based NUMA on ARM64 To: David Daney , Will Deacon , linux-arm-kernel@lists.infradead.org, Mark Rutland , Catalin Marinas , Tony Luck , Fenghua Yu , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand , Grant Likely , Robert Moore , Lv Zheng , Hanjun Guo , Marc Zyngier , linux-ia64@vger.kernel.org, linux-acpi@vger.kernel.org, devel@acpica.org References: <1464129345-18985-1-git-send-email-ddaney.cavm@gmail.com> <1464129345-18985-16-git-send-email-ddaney.cavm@gmail.com> Cc: Robert Richter , linux-kernel@vger.kernel.org, David Daney From: Matthias Brugger Message-ID: <5759C7C0.3050508@suse.com> Date: Thu, 9 Jun 2016 21:47:12 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 In-Reply-To: <1464129345-18985-16-git-send-email-ddaney.cavm@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 25/05/16 00:35, David Daney wrote: > From: Hanjun Guo > > Add function needed for cpu to node mapping, and enable ACPI based > NUMA for ARM64 in Kconfig > > Signed-off-by: Hanjun Guo > Signed-off-by: Robert Richter > [david.daney@cavium.com added ACPI_NUMA default to y for ARM64] > Signed-off-by: David Daney > Acked-by: Catalin Marinas > --- > 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? Regards, Matthias > > acpi_table_parse_entries_array(ACPI_SIG_SRAT, > sizeof(struct acpi_table_srat), > diff --git a/include/linux/acpi.h b/include/linux/acpi.h > index 8010b26..9515db6 100644 > --- a/include/linux/acpi.h > +++ b/include/linux/acpi.h > @@ -232,10 +232,25 @@ int acpi_table_parse_madt(enum acpi_madt_type id, > int acpi_parse_mcfg (struct acpi_table_header *header); > void acpi_table_print_madt_entry (struct acpi_subtable_header *madt); > > -/* the following four functions are architecture-dependent */ > +/* the following numa functions are architecture-dependent */ > void acpi_numa_slit_init (struct acpi_table_slit *slit); > + > +#if defined(CONFIG_X86) || defined(CONFIG_IA64) > void acpi_numa_processor_affinity_init (struct acpi_srat_cpu_affinity *pa); > +#else > +static inline void > +acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) { } > +#endif > + > void acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa); > + > +#ifdef CONFIG_ARM64 > +void acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity *pa); > +#else > +static inline void > +acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity *pa) { } > +#endif > + > int acpi_numa_memory_affinity_init (struct acpi_srat_mem_affinity *ma); > > #ifndef PHYS_CPUID_INVALID >