> From: enuhtac <[email protected]>
> Date: Sun, 8 Feb 2015 11:17:47 +0000 (UTC)
> 
> The first sign during the boot process of garbage in the 
> ACPI_MADT_LAPIC_NMI 
> structures mentioned by me earlier are these lines:
> 
> acpimadt0: bogus nmi for apid 0
> acpimadt0: bogus nmi for apid 2
> 
> Here the kernel detects wrong values in the flags fields and removes the 
> corresponding ACPI_MADT_LAPIC_NMI entries. A third entry (for apid 1) goes 
> through unnoticed because by chance the flag values are spec conform. 
> Nevertheless the lint entry is bogus which causes the kernel panic later 
> on.
> 
> The "ehci_sync_hc: tsleep() = 35" is probably also a follow up error
> of the faulty LAPIC setup because the USB driver is waiting for some
> interrupt to occur which never happens.
> 
> Still I do not know what to do to fix this issue.

Only pin 0 and 1 make sense, so here is a diff that checks for those
values and declares the entry bogus if the pin value is anything else.

Does this fix your problem?


Index: acpimadt.c
===================================================================
RCS file: /home/cvs/src/sys/dev/acpi/acpimadt.c,v
retrieving revision 1.30
diff -u -p -r1.30 acpimadt.c
--- acpimadt.c  9 Dec 2014 06:58:29 -0000       1.30
+++ acpimadt.c  8 Feb 2015 23:38:47 -0000
@@ -359,7 +359,8 @@ acpimadt_attach(struct device *parent, s
                        map->ioapic_pin = pin;
                        map->flags = entry->madt_lapic_nmi.flags;
 
-                       if (!acpimadt_cfg_intr(entry->madt_lapic_nmi.flags, 
&map->redir)) {
+                       if ((pin != 0 && pin != 1) ||
+                           !acpimadt_cfg_intr(entry->madt_lapic_nmi.flags, 
&map->redir)) {
                                printf("%s: bogus nmi for apid %d\n",
                                    self->dv_xname, map->cpu_id);
                                mp_nintrs--;

Reply via email to