Date: Tue, 11 Mar 2008 11:30:07 GMT From: Dan Lukes <dan@obluda.cz> To: freebsd-acpi@FreeBSD.org Subject: Re: kern/121558: Supermicro X7SB4 Fatal trap 12 when ACPI disabled Message-ID: <200803111130.m2BBU7GV014923@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/121558; it has been noted by GNATS. From: Dan Lukes <dan@obluda.cz> To: Leon Kos <begunje@gmail.com> Cc: jhb@freebsd.org, volker@vwsoft.com, bug-followup@freebsd.org Subject: Re: kern/121558: Supermicro X7SB4 Fatal trap 12 when ACPI disabled Date: Tue, 11 Mar 2008 11:53:23 +0100 > ioapic_get_vector(0,13) at ioapic_get_vector+0x0a > mptable_pci_route_interrupt_handler(c009de3d,c1020890) at mptable_pci_route_interrupt_handler+0x35 The function implementation: ------------------ > ioapic_get_vector(void *cookie, u_int pin) > { > struct ioapic *io; > > io = (struct ioapic *)cookie; > if (pin >= io->io_numintr) ... ------------------ E.g. the ioapic_get_vector seems to be called with NULL cookie which is used as a valid pointer a dereferenced - exactly as I fabulate in previous email. The function implementation: ------------------ > mptable_pci_route_interrupt_handler(u_char *entry, void *arg) > { > ... > /* Make sure the APIC maps to a known APIC. */ > KASSERT(ioapics[intr->dst_apic_id] != NULL, > ("No I/O APIC %d to route interrupt to", intr->dst_apic_id)); > ... > vector = ioapic_get_vector(ioapics[intr->dst_apic_id], > intr->dst_apic_int); ------------------ As your kernel is compiled without INVARIANTS the KASSERT test become void and ioapic_get_vector may be called with NULL causing the abend later. It's because the intr->dst_apic_id point to APIC that doesn't exist (you can run kernel with INVARIANTS to display the dst_apic_id in question). Please note the MPTABLE generated by BIOS MAY change also when ACPI is (de)activated in BIOS. You may try to boot with ACPI enabled in BIOS but disabled in OS. It may (or may not) help to you. It may be problem with MPTABLE itself (eg. not in FreeBSD) or with it's parsing (e.g. in FreeBSD). MPTABLE is generated by BIOS. Look into BIOS if MPTABLE version can be set then use 1.4. Especially dont use "auto" as version even such option present. The output of mptable command may help to us. Dan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803111130.m2BBU7GV014923>