x86/ACPI: Ignore entries with invalid APIC IDs when parsing MADT

It seems some firmwares put dummy entries in the ACPI MADT table for non
existing processors. On my NUC11TNHi5 those have the invalid APIC ID
0xff. Linux already has code to handle those cases both in
acpi_parse_lapic [1] as well as in acpi_parse_x2apic [2]. So add the
same check to Xen.

Link: https://git.kernel.org/torvalds/c/f3bf1dbe64b62a2058dd1944c00990df203e8e7a # [1]
Link: https://git.kernel.org/torvalds/c/10daf10ab154e31237a8c07242be3063fb6a9bf4 # [2]
Signed-off-by: Simon Gaiser <simon@invisiblethingslab.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Simon Gaiser authored and Andrew Cooper committed 2023-08-29 15:54:45 +01:00
1 parent 067f18c3a7
commit 47342d8f49
1 file changed
+10 -4
+10 -4
View File
@@ -87,14 +87,17 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
if (BAD_MADT_ENTRY(processor, end))
return -EINVAL;
/* Ignore entries with invalid x2APIC ID */
if (processor->local_apic_id == 0xffffffff)
return 0;
/* Don't register processors that cannot be onlined. */
if (madt_revision >= 5 &&
!(processor->lapic_flags & ACPI_MADT_ENABLED) &&
!(processor->lapic_flags & ACPI_MADT_ONLINE_CAPABLE))
return 0;
if ((processor->lapic_flags & ACPI_MADT_ENABLED) ||
processor->local_apic_id != 0xffffffff || opt_cpu_info) {
if ((processor->lapic_flags & ACPI_MADT_ENABLED) || opt_cpu_info) {
acpi_table_print_madt_entry(header);
log = true;
}
@@ -143,14 +146,17 @@ acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end)
if (BAD_MADT_ENTRY(processor, end))
return -EINVAL;
/* Ignore entries with invalid APIC ID */
if (processor->id == 0xff)
return 0;
/* Don't register processors that cannot be onlined. */
if (madt_revision >= 5 &&
!(processor->lapic_flags & ACPI_MADT_ENABLED) &&
!(processor->lapic_flags & ACPI_MADT_ONLINE_CAPABLE))
return 0;
if ((processor->lapic_flags & ACPI_MADT_ENABLED) ||
processor->id != 0xff || opt_cpu_info)
if ((processor->lapic_flags & ACPI_MADT_ENABLED) || opt_cpu_info)
acpi_table_print_madt_entry(header);
/* Record local apic id only when enabled */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.