On Thu, Oct 6, 2016 at 1:06 AM, Dou Liyang <douly.fnst@xxxxxxxxxxxxxx> wrote:
I seem to remember that in x2APIC Spec the x2APIC ID may be at 255 or
greater.
Good to know. Maybe later when one package have more cores like 30 cores etc.
If we do that judgment, it may be affect x2APIC's work in some other places.
I saw the MADT, the main reason may be that we define 0xff to acpi_id
in LAPIC mode.
As you said, it was like:
[ 42.107902] ACPI: LAPIC (acpi_id[0xff] lapic_id[0xff] disabled)
[ 42.120125] ACPI: LAPIC (acpi_id[0xff] lapic_id[0xff] disabled)
[ 42.132361] ACPI: LAPIC (acpi_id[0xff] lapic_id[0xff] disabled)
...
How about doing the acpi_id check when we parse it in
acpi_parse_lapic().
8<----------------
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -233,6 +233,11 @@ acpi_parse_lapic(struct acpi_subtable_header * header,
const unsigned long end)
acpi_table_print_madt_entry(header);
+ if (processor->id >= 255) {
+ ++disabled_cpus;
+ return -EINVAL;
+ }
+
/*
* We need to register disabled CPU as well to permit
* counting disabled CPUs. This allows us to size
Yes, that should work. but should do the same thing for x2apic
in acpi_parse_x2apic should have
+ if (processor->local_apic_id == -1) {
+ ++disabled_cpus;
+ return -EINVAL;
+ }
that is the reason why i want to extend acpi_register_lapic()
to take extra disabled_id (one is 0xff and another is 0xffffffff)
so could save some lines.
Thanks
Yinghai