Panic on S3 suspend

Peter Jeremy peterjeremy at optushome.com.au
Thu Jan 26 12:40:14 PST 2006


I'm not sure if this is most applicable here, -acpi or -mobile.

6-STABLE/amd64 from last weekend running on an HP nx6125 laptop.
I tried setting the lid switch to S3 and then closing the lid
whilst there was network activity (pinging the system) and it
panic'd.  I have a crash dump but 

I'm not especially familiar with the amd64 memory map so I'm not
sure what the fault address suggests - it doesn't look like a
NULL dereference or truncated address so I guess it's garbage.

Is this just of case of suspend not disabling interrupts fast enough?

Unread portion of the kernel message buffer:
fwohci0: fwohci_pci_suspend
fwohci0: device physically ejected?

Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x78572a2f0
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xffffffff801b8c91
stack pointer           = 0x10:0xffffffffa181fb70
frame pointer           = 0x10:0xffffffffa181fbb0
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 33 (irq23: bge0)
trap number             = 12
panic: page fault
KDB: stack backtrace:
kdb_backtrace() at kdb_backtrace+0x37
panic() at panic+0x164
trap_fatal() at trap_fatal+0x378
trap_pfault() at trap_pfault+0x1cf
trap() at trap+0x2f3
calltrap() at calltrap+0x5
--- trap 0xc, rip = 0xffffffff801b8c91, rsp = 0xffffffffa181fb70, rbp = 0xffffffffa181fbb0 ---
bge_start_locked() at bge_start_locked+0x61
bge_intr() at bge_intr+0x283
ithread_loop() at ithread_loop+0x169
fork_exit() at fork_exit+0x95
fork_trampoline() at fork_trampoline+0xe

(kgdb) where
#0  doadump () at pcpu.h:172
#1  0xffffffff8026894f in boot (howto=260)
    at /usr/src/sys/kern/kern_shutdown.c:399
#2  0xffffffff80268cfb in panic (fmt=0xffffffff803cf38c "%s")
    at /usr/src/sys/kern/kern_shutdown.c:555
#3  0xffffffff80384af8 in trap_fatal (frame=0xffffffffa181fac0, 
    eva=32303653616) at /usr/src/sys/amd64/amd64/trap.c:660
#4  0xffffffff8038474f in trap_pfault (frame=0xffffffffa181fac0, usermode=0)
    at /usr/src/sys/amd64/amd64/trap.c:573
#5  0xffffffff803843f3 in trap (frame=
      {tf_rdi = -1099501924352, tf_rsi = -1098605723040, tf_rdx = -1099501753856, tf_rcx = 0, tf_r8 = -1585316592, tf_r9 = 0, tf_rax = 4294967295, tf_rbx = -1099501924352, tf_rbp = -1585316944, tf_r10 = 3, tf_r11 = -1098803534592, tf_r12 = -1099501924352, tf_r13 = -2056097792, tf_r14 = 0, tf_r15 = -1098605848128, tf_trapno = 12, tf_addr = 32303653616, tf_flags = -2144881357, tf_err = 0, tf_rip = -2145678191, tf_cs = 8, tf_rflags = 66050, tf_rsp = -1585316992, tf_ss = 16})
    at /usr/src/sys/amd64/amd64/trap.c:352
#6  0xffffffff8037431b in calltrap ()
    at /usr/src/sys/amd64/amd64/exception.S:168
#7  0xffffffff801b8c91 in bge_start_locked (ifp=0xffffff0000941000)
    at /usr/src/sys/dev/bge/if_bge.c:3362
#8  0xffffffff801b8763 in bge_intr (xsc=0xffffff0000941000)
    at /usr/src/sys/dev/bge/if_bge.c:3091
#9  0xffffffff80253369 in ithread_loop (arg=0xffffff0000941000)
    at /usr/src/sys/kern/kern_intr.c:547
#10 0xffffffff80252475 in fork_exit (
    callout=0xffffffff80253200 <ithread_loop>, arg=0xffffff0000029500, 
    frame=0xffffffffa181fc50) at /usr/src/sys/kern/kern_fork.c:789
#11 0xffffffff8037467e in fork_trampoline ()
    at /usr/src/sys/amd64/amd64/exception.S:394
#12 0x0000000000000000 in ?? ()
Previous frame identical to this frame (corrupt stack?)
...
#7  0xffffffff801b8c91 in bge_start_locked (ifp=0xffffff0000941000)
    at /usr/src/sys/dev/bge/if_bge.c:3362
3362                    BPF_MTAP(ifp, m_head);
Current language:  auto; currently c
(kgdb) p ifp
$1 = (struct ifnet *) 0xffffff0000941000
(kgdb) p m_head
$2 = (struct mbuf *) 0xffffff0000941000

That definitely doesn't look correct.  Printing the contents of both
suggests tat it shuld be ifp:
(kgdb) p *ifp
$3 = {if_softc = 0xffffffff85727000, if_l2com = 0xffffff0000968840, if_link = {
    tqe_next = 0xffffff00009f5000, tqe_prev = 0xffffffff8057b730}, 
  if_xname = "bge0", '\0' <repeats 11 times>, 
  if_dname = 0xffffff00007bf5d8 "bge", if_dunit = 0, if_addrhead = {
    tqh_first = 0xffffff000094e200, tqh_last = 0xffffff002ab252b8}, 
  if_klist = {kl_list = {slh_first = 0x0}, 
    kl_lock = 0xffffffff8024d490 <knlist_mtx_lock>, 
    kl_unlock = 0xffffffff8024d4b0 <knlist_mtx_unlock>, 
    kl_locked = 0xffffffff8024d4d0 <knlist_mtx_locked>, 
    kl_lockarg = 0xffffffff8056dbe0}, if_pcount = 0, if_carp = 0x0, 
  if_bpf = 0x0, if_index = 1, if_timer = 0, if_nvlans = 0, if_flags = 34819, 
  if_capabilities = 26, if_capenable = 26, if_linkmib = 0x0, 
  if_linkmiblen = 0, if_data = {ifi_type = 6 '\006', ifi_physical = 0 '\0', 
    ifi_addrlen = 6 '\006', ifi_hdrlen = 14 '\016', ifi_link_state = 2 '\002', 
    ifi_recvquota = 0 '\0', ifi_xmitquota = 0 '\0', ifi_datalen = 152 '\230', 
    ifi_mtu = 1500, ifi_metric = 0, ifi_baudrate = 10000000, 
    ifi_ipackets = 38910, ifi_ierrors = 0, ifi_opackets = 12023, 
    ifi_oerrors = 0, ifi_collisions = 0, ifi_ibytes = 50025442, 
    ifi_obytes = 4410559, ifi_imcasts = 350, ifi_omcasts = 0, ifi_iqdrops = 0, 
    ifi_noproto = 0, ifi_hwassist = 7, ifi_epoch = 0, ifi_lastchange = {
      tv_sec = 1138272696, tv_usec = 308610}}, if_multiaddrs = {
    tqh_first = 0xffffff0035cb2c40, tqh_last = 0xffffff0035cb2d40}, 
  if_amcount = 0, if_output = 0xffffffff802dd820 <ether_output>, 
  if_input = 0xffffffff802de190 <ether_input>, 
  if_start = 0xffffffff801b8fc0 <bge_start>, 
  if_ioctl = 0xffffffff801b9670 <bge_ioctl>, 
  if_watchdog = 0xffffffff801b9990 <bge_watchdog>, 
  if_init = 0xffffffff801b9370 <bge_init>, 
  if_resolvemulti = 0xffffffff802deb70 <ether_resolvemulti>, if_spare1 = 0x0, 
  if_spare2 = 0x0, if_spare3 = 0x0, if_drv_flags = 64, if_spare_flags2 = 0, 
  if_snd = {ifq_head = 0xffffff002a34a500, ifq_tail = 0xffffff002a34a500, 
    ifq_len = 1, ifq_maxlen = 511, ifq_drops = 0, ifq_mtx = {mtx_object = {
        lo_class = 0xffffffff8053a340, lo_name = 0xffffff0000941020 "bge0", 
        lo_type = 0xffffffff803f685d "if send queue", lo_flags = 196608, 
        lo_list = {tqe_next = 0x0, tqe_prev = 0x0}, lo_witness = 0x0}, 
      mtx_lock = 4, mtx_recurse = 0}, ifq_drv_head = 0x0, ifq_drv_tail = 0x0, 
    ifq_drv_len = 0, ifq_drv_maxlen = 511, altq_type = 0, altq_flags = 1, 
    altq_disc = 0x0, altq_ifp = 0xffffff0000941000, altq_enqueue = 0, 
    altq_dequeue = 0, altq_request = 0, altq_clfier = 0x0, altq_classify = 0, 
    altq_tbr = 0x0, altq_cdnr = 0x0}, 
  if_broadcastaddr = 0xffffffff803f6b60 "ÿÿÿÿÿÿ", if_bridge = 0x0, 
  lltables = 0x0, if_label = 0x0, if_prefixhead = {tqh_first = 0x0, 
    tqh_last = 0xffffff00009412b0}, if_afdata = {0x0 <repeats 37 times>}, 
  if_afdata_initialized = 2, if_afdata_mtx = {mtx_object = {
      lo_class = 0xffffffff8053a340, lo_name = 0xffffffff803f684d "if_afdata", 
      lo_type = 0xffffffff803f684d "if_afdata", lo_flags = 196608, lo_list = {
        tqe_next = 0x0, tqe_prev = 0x0}, lo_witness = 0x0}, mtx_lock = 4, 
    mtx_recurse = 0}, if_starttask = {ta_link = {stqe_next = 0x0}, 
    ta_pending = 0, ta_priority = 0, 
    ta_func = 0xffffffff802dcab0 <if_start_deferred>, 
    ta_context = 0xffffff0000941000}, if_linktask = {ta_link = {
      stqe_next = 0x0}, ta_pending = 0, ta_priority = 0, 
    ta_func = 0xffffffff802dab00 <do_link_state_change>, 
    ta_context = 0xffffff0000941000}, if_addr_mtx = {mtx_object = {
      lo_class = 0xffffffff8053a340, 
      lo_name = 0xffffffff803f6841 "if_addr_mtx", 
      lo_type = 0xffffffff803f6841 "if_addr_mtx", lo_flags = 196608, 
      lo_list = {tqe_next = 0x0, tqe_prev = 0x0}, lo_witness = 0x0}, 
    mtx_lock = 4, mtx_recurse = 0}}
(kgdb)


-- 
Peter Jeremy


More information about the freebsd-stable mailing list