[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN PATCH] 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. Note that on some older (2nd gen Core i) laptop of mine I also saw dummy entries with a valid APIC ID. Linux would still ignore those because they have !ACPI_MADT_ENABLED && !ACPI_MADT_ONLINE_CAPABLE. But in Xen this check is only active for madt_revision >= 5. But since this version check seems to be intentionally I leave that alone. Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f3bf1dbe64b62a2058dd1944c00990df203e8e7a # [1] Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=10daf10ab154e31237a8c07242be3063fb6a9bf4 # [2] Signed-off-by: Simon Gaiser <simon@xxxxxxxxxxxxxxxxxxxxxx> --- xen/arch/x86/acpi/boot.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/acpi/boot.c b/xen/arch/x86/acpi/boot.c index 54b72d716b..4a62822fa9 100644 --- a/xen/arch/x86/acpi/boot.c +++ b/xen/arch/x86/acpi/boot.c @@ -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 apicid */ + 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 apicid */ + 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 */ -- 2.40.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |