Re: ACPI causes page fault/panic upon reboot

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 31 Dec 2003 12:05:55 -0500 (EST)
On 31-Dec-2003 Dan Hulme wrote:
> John Baldwin wrote:
> 
>>Can you build a debug kernel, reproduce the panic, and then do a list
>>from gdb on your kernel.debug of the instruction pointer?  For example,
>>from the above you do:
>>
>>gdb -k kernel.debug
>>l *0xc05fd8c5
>>  
>>
> First I should say that turning off acpi seemed to fix the problem.  
> However, the problem appears to be in dc0.
> 
> Ok, rebuilt my kernel with
> 
> makeoptions DEBUG=-g
> options   DDB
> 
> Rebooted, did a trace when it went to the db prompt.:
> 
> ***********************
> 
> Shutting down ACPI
> 
> Fatal trap 12: page fault while in kernel mode
> fault virtual address    = 0x18
> fault code                = supervisor write, page not present
> instruction pointer        = 0x8:0xc0603bc5
> stack pointer            = 0x10:0xd032cc90
> frame pointer            = 0x10:0xd032ccc0
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                         = DPL 0, pres 1, def32 1, gran 1
> processor eflags        = interrupt enabled, resume, IOPL = 0
> current process            = 19 (irq9: rl0 dc0 acpi0)
> kernel: type 12 trap, code=0
> Stopped at        dc_rxeof+0x1b5: movl    %edx,0x18(%eax)
> 
> db>trace
> 
> dc_rxeof(c33bb000,0,c0700bbe,c43,c33bb000) at dc_rxeof+0x1b5
> dc_intr(c33bb000,0,c06f4d21,21f,c333d388) at dc_intr+0x100
> ithread_loop(c1843980,d032cd48,c06f4be6,311,0) at ithread_loop+0x162
> fork_trampoline() at fork_trampoline+0x8
> --- trap 0x1, eip = 0, esp = 0xd032cd7c, ebp = 0 ---
> 
> *****************
> 
> Did a gdb -k kernel.debug, and listed the code:
> 
> *****************
> 
> (kgdb) l *0xc0603bc5
> 0xc0603bc5 is in dc_rxeof (../../../pci/if_dc.c:2804).
> 2799                     * If we are on an architecture with alignment 
> problems, or
> 2800                     * if the allocation fails, then use m_devget 
> and leave the
> 2801                     * existing buffer in the receive ring.
> 2802                     */
> 2803                    if (dc_quick && dc_newbuf(sc, i, 1) == 0) {
> 2804                            m->m_pkthdr.rcvif = ifp;
> 2805                            m->m_pkthdr.len = m->m_len = total_len;
> 2806                            DC_INC(i, DC_RX_LIST_CNT);
> 2807                    } else
> 2808    #endif
> 
> *****************
> 
> I hope this helps.

Looks like m is NULL.  One thing you might try is setting the
hw.acpi.disable_on_poweroff sysctl to 0.  If that works, you
can set it in /boot/loader.conf to make it permament.

-- 

John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/
Received on Wed Dec 31 2003 - 08:05:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:36 UTC