> 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--;