From e32940f7269306a108fbe3f2ee742a3a8e74133e Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 7 Jul 2013 12:44:30 +0200 Subject: [PATCH] acpi: skip disabled LAPIC entries disabled LAPIC entries overwrote the bootstrap processor apic causing the machine panic with: "no bootstrap processor". (problem with lenovo X230) just ignore entries that are disabled or collide with entries already found. (should not happen) --- sys/src/9/pc/archacpi.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/sys/src/9/pc/archacpi.c b/sys/src/9/pc/archacpi.c index 45e3b938d..9a27f79c7 100644 --- a/sys/src/9/pc/archacpi.c +++ b/sys/src/9/pc/archacpi.c @@ -401,16 +401,21 @@ Foundapic: a->lintr[0] = ApicIMASK; a->lintr[1] = ApicIMASK; a->flags = p[4] & PcmpEN; - if(a->flags & PcmpEN){ - a->machno = machno++; - /* - * platform firmware should list the boot processor - * as the first processor entry in the MADT - */ - if(a->machno == 0) - a->flags |= PcmpBP; + /* skip disabled processors */ + if((a->flags & PcmpEN) == 0 || mpapic[a->apicno] != nil){ + xfree(a); + break; } + a->machno = machno++; + + /* + * platform firmware should list the boot processor + * as the first processor entry in the MADT + */ + if(a->machno == 0) + a->flags |= PcmpBP; + mpapic[a->apicno] = a; break; case 0x01: /* I/O APIC */