x86, acpi: Skip acpi x2apic entries if the x2apic feature is not present
If the x2apic feature is not present (either the cpu is not capable of it or the user has disabled the feature using boot-parameter etc), ignore the x2apic MADT and SRAT entries provided by the ACPI tables. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Link: http://lkml.kernel.org/r/20111222014632.540896503@sbsiddha-desk.sc.intel.com Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
Родитель
e8524b2f43
Коммит
a35fd28256
|
@ -219,6 +219,8 @@ static int __init
|
|||
acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
|
||||
{
|
||||
struct acpi_madt_local_x2apic *processor = NULL;
|
||||
int apic_id;
|
||||
u8 enabled;
|
||||
|
||||
processor = (struct acpi_madt_local_x2apic *)header;
|
||||
|
||||
|
@ -227,6 +229,8 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
|
|||
|
||||
acpi_table_print_madt_entry(header);
|
||||
|
||||
apic_id = processor->local_apic_id;
|
||||
enabled = processor->lapic_flags & ACPI_MADT_ENABLED;
|
||||
#ifdef CONFIG_X86_X2APIC
|
||||
/*
|
||||
* We need to register disabled CPU as well to permit
|
||||
|
@ -235,8 +239,10 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
|
|||
* to not preallocating memory for all NR_CPUS
|
||||
* when we use CPU hotplug.
|
||||
*/
|
||||
acpi_register_lapic(processor->local_apic_id, /* APIC ID */
|
||||
processor->lapic_flags & ACPI_MADT_ENABLED);
|
||||
if (!cpu_has_x2apic && (apic_id >= 0xff) && enabled)
|
||||
printk(KERN_WARNING PREFIX "x2apic entry ignored\n");
|
||||
else
|
||||
acpi_register_lapic(apic_id, enabled);
|
||||
#else
|
||||
printk(KERN_WARNING PREFIX "x2apic entry ignored\n");
|
||||
#endif
|
||||
|
|
|
@ -69,6 +69,12 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa)
|
|||
if ((pa->flags & ACPI_SRAT_CPU_ENABLED) == 0)
|
||||
return;
|
||||
pxm = pa->proximity_domain;
|
||||
apic_id = pa->apic_id;
|
||||
if (!cpu_has_x2apic && (apic_id >= 0xff)) {
|
||||
printk(KERN_INFO "SRAT: PXM %u -> X2APIC 0x%04x ignored\n",
|
||||
pxm, apic_id);
|
||||
return;
|
||||
}
|
||||
node = setup_node(pxm);
|
||||
if (node < 0) {
|
||||
printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm);
|
||||
|
@ -76,7 +82,6 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa)
|
|||
return;
|
||||
}
|
||||
|
||||
apic_id = pa->apic_id;
|
||||
if (apic_id >= MAX_LOCAL_APIC) {
|
||||
printk(KERN_INFO "SRAT: PXM %u -> APIC 0x%04x -> Node %u skipped apicid that is too big\n", pxm, apic_id, node);
|
||||
return;
|
||||
|
|
Загрузка…
Ссылка в новой задаче