On Wed, Mar 29, 2023 at 7:46 PM Mario Limonciello <mario.limonciello@xxxxxxx> wrote: > > ACPI 6.3 introduced the online capable bit, and also introduced MADT > version 5. > > This was used to distinguish whether the offset storing online capable > could be used. However ACPI 6.2b has MADT version "45" which is for > an errata version of the ACPI 6.2 spec. This means that the Linux code > for detecting availability of MADT will mistakingly flag ACPI 6.2b as > supporting online capable which is inaccurate as it's an ACPI 6.3 feature. > > Instead use the FADT major and minor revision fields to distingush this. > > Reported-by: Eric DeVolder <eric.devolder@xxxxxxxxxx> > Reported-by: Borislav Petkob <bp@xxxxxxxxx> s/Petkob/Petkov/ I suppose? Would have been nice to CC this to linux-acpi (done now). Anyway, x86 guys, are you going to handle this or do you want me to do that? > Fixes: aa06e20f1be6 ("x86/ACPI: Don't add CPUs that are not online capable") > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > arch/x86/kernel/acpi/boot.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c > index 1c38174b5f01..e92e3292fef7 100644 > --- a/arch/x86/kernel/acpi/boot.c > +++ b/arch/x86/kernel/acpi/boot.c > @@ -146,7 +146,10 @@ static int __init acpi_parse_madt(struct acpi_table_header *table) > > pr_debug("Local APIC address 0x%08x\n", madt->address); > } > - if (madt->header.revision >= 5) > + > + if (acpi_gbl_FADT.header.revision > 6 || > + (acpi_gbl_FADT.header.revision == 6 && > + acpi_gbl_FADT.minor_revision >= 3)) > acpi_support_online_capable = true; > > default_acpi_madt_oem_check(madt->header.oem_id, > -- > 2.34.1 >