|
@@ -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[2].id = ACPI_SRAT_TYPE_GICC_AFFINITY;
|
|
|
+ srat_proc[2].handler = acpi_parse_gicc_affinity;
|
|
|
|
|
|
acpi_table_parse_entries_array(ACPI_SIG_SRAT,
|
|
|
sizeof(struct acpi_table_srat),
|