forked from luck/tmp_suning_uos_patched
ACPI / NUMA: Enable ACPI based NUMA on ARM64
Add function needed for cpu to node mapping, and enable ACPI based NUMA for ARM64 in Kconfig Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> Signed-off-by: Robert Richter <rrichter@cavium.com> [david.daney@cavium.com added ACPI_NUMA default to y for ARM64] Signed-off-by: David Daney <david.daney@cavium.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
d8b47fca8c
commit
4bac6fa73d
|
@ -291,8 +291,8 @@ config ACPI_THERMAL
|
||||||
config ACPI_NUMA
|
config ACPI_NUMA
|
||||||
bool "NUMA support"
|
bool "NUMA support"
|
||||||
depends on NUMA
|
depends on NUMA
|
||||||
depends on (X86 || IA64)
|
depends on (X86 || IA64 || ARM64)
|
||||||
default y if IA64_GENERIC || IA64_SGI_SN2
|
default y if IA64_GENERIC || IA64_SGI_SN2 || ARM64
|
||||||
|
|
||||||
config ACPI_CUSTOM_DSDT_FILE
|
config ACPI_CUSTOM_DSDT_FILE
|
||||||
string "Custom DSDT Table file to include"
|
string "Custom DSDT Table file to include"
|
||||||
|
|
|
@ -170,6 +170,18 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
pr_warn("Found unsupported SRAT entry (type = 0x%x)\n",
|
pr_warn("Found unsupported SRAT entry (type = 0x%x)\n",
|
||||||
header->type);
|
header->type);
|
||||||
|
@ -360,6 +372,24 @@ acpi_parse_processor_affinity(struct acpi_subtable_header *header,
|
||||||
return 0;
|
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 __initdata parsed_numa_memblks;
|
||||||
|
|
||||||
static int __init
|
static int __init
|
||||||
|
@ -404,6 +434,9 @@ int __init acpi_numa_init(void)
|
||||||
{
|
{
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
|
if (acpi_disabled)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Should not limit number with cpu num that is from NR_CPUS or nr_cpus=
|
* 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.
|
* 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 */
|
/* SRAT: Static Resource Affinity Table */
|
||||||
if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
|
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));
|
memset(srat_proc, 0, sizeof(srat_proc));
|
||||||
srat_proc[0].id = ACPI_SRAT_TYPE_CPU_AFFINITY;
|
srat_proc[0].id = ACPI_SRAT_TYPE_CPU_AFFINITY;
|
||||||
srat_proc[0].handler = acpi_parse_processor_affinity;
|
srat_proc[0].handler = acpi_parse_processor_affinity;
|
||||||
srat_proc[1].id = ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY;
|
srat_proc[1].id = ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY;
|
||||||
srat_proc[1].handler = acpi_parse_x2apic_affinity;
|
srat_proc[1].handler = acpi_parse_x2apic_affinity;
|
||||||
|
srat_proc[2].id = ACPI_SRAT_TYPE_GICC_AFFINITY;
|
||||||
|
srat_proc[2].handler = acpi_parse_gicc_affinity;
|
||||||
|
|
||||||
acpi_table_parse_entries_array(ACPI_SIG_SRAT,
|
acpi_table_parse_entries_array(ACPI_SIG_SRAT,
|
||||||
sizeof(struct acpi_table_srat),
|
sizeof(struct acpi_table_srat),
|
||||||
|
|
|
@ -232,10 +232,25 @@ int acpi_table_parse_madt(enum acpi_madt_type id,
|
||||||
int acpi_parse_mcfg (struct acpi_table_header *header);
|
int acpi_parse_mcfg (struct acpi_table_header *header);
|
||||||
void acpi_table_print_madt_entry (struct acpi_subtable_header *madt);
|
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);
|
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);
|
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);
|
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);
|
int acpi_numa_memory_affinity_init (struct acpi_srat_mem_affinity *ma);
|
||||||
|
|
||||||
#ifndef PHYS_CPUID_INVALID
|
#ifndef PHYS_CPUID_INVALID
|
||||||
|
|
Loading…
Reference in New Issue
Block a user