[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/ACPI: ignore processors which cannot be brought online
commit 0a7ebb1861062f795bab53272789ed2802d84ec0 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Wed Sep 15 11:00:40 2021 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Sep 15 11:00:40 2021 +0200 x86/ACPI: ignore processors which cannot be brought online ACPI 6.3 introduced a flag allowing to tell MADT entries describing hotpluggable processors from ones which are simply placeholders (often used by firmware writers to simplify handling there). Inspired by a Linux patch by Mario Limonciello <mario.limonciello@xxxxxxx>. Requested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- xen/arch/x86/acpi/boot.c | 16 ++++++++++++++++ xen/include/acpi/actbl1.h | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/acpi/boot.c b/xen/arch/x86/acpi/boot.c index 8fe2d6fe0f..5e38b4b17c 100644 --- a/xen/arch/x86/acpi/boot.c +++ b/xen/arch/x86/acpi/boot.c @@ -53,6 +53,8 @@ bool __initdata acpi_ioapic; static bool __initdata acpi_skip_timer_override; boolean_param("acpi_skip_timer_override", acpi_skip_timer_override); +static uint8_t __initdata madt_revision; + static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; /* -------------------------------------------------------------------------- @@ -64,6 +66,8 @@ static int __init acpi_parse_madt(struct acpi_table_header *table) struct acpi_table_madt *madt = container_of(table, struct acpi_table_madt, header); + madt_revision = madt->header.revision; + if (madt->address) { acpi_lapic_addr = (u64) madt->address; @@ -86,6 +90,12 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end) if (BAD_MADT_ENTRY(processor, end)) return -EINVAL; + /* 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) { acpi_table_print_madt_entry(header); @@ -136,6 +146,12 @@ acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end) if (BAD_MADT_ENTRY(processor, end)) return -EINVAL; + /* 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) acpi_table_print_madt_entry(header); diff --git a/xen/include/acpi/actbl1.h b/xen/include/acpi/actbl1.h index e1991362dc..923641fc9e 100644 --- a/xen/include/acpi/actbl1.h +++ b/xen/include/acpi/actbl1.h @@ -858,7 +858,8 @@ struct acpi_madt_generic_translator { /* MADT Local APIC flags */ -#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ +#define ACPI_MADT_ENABLED (1 << 0) /* 00: Processor is usable if set */ +#define ACPI_MADT_ONLINE_CAPABLE (1 << 1) /* 01: Processor can be onlined */ /* MADT MPS INTI flags (inti_flags) */ -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |