panic on RELENG_5 on em(4)

Rong-En Fan grafan at gmail.com
Thu Oct 27 01:00:23 PDT 2005


Hi,

I'm running RELENG_5 around Oct 12, got a panic related to em(4).
After some searching, I saw a similar panic reported on -current
(his/her system is also RELENG_5) in May, but no further replies.
The kernel is similar to GENERIC with IPFW and have HTT
enabled in loader.conf. Box is a 2*Xeon with HTT, SMP kernel
is enabled, thus there are 4 logical cpus. For some reasons,
I did not have DDB compiled. The kgdb outputs are enclosed.
If there are people interested to help debug this, I can send
information as request.

Thanks,,
Rong-En Fan

(kgdb and console):
Fatal trap 12: page fault while in kernel mode
cpuid = 2; apic id = 06
fault virtual address   = 0xbfc38018
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xc05fb49f
stack pointer           = 0x10:0xe6448bc0
frame pointer           = 0x10:0xe6448c24
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         = 77 (irq16: em0)
trap number             = 12
panic: page fault
cpuid = 2

#0  doadump () at pcpu.h:160
No locals.
#1  0xc04c1268 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:412
        first_buf_printf = 1
#2  0xc04c1616 in panic (fmt=0xc062dcbe "%s")
    at /usr/src/sys/kern/kern_shutdown.c:568
        td = (struct thread *) 0xc313bd80
        bootopt = 260
        newpanic = 0
        ap = 0xc313bd80 "L\023\020\t"
        buf = "page fault", '\0' <repeats 245 times>
#3  0xc06121dd in trap_fatal (frame=0xe6448b80, eva=0)
    at /usr/src/sys/i386/i386/trap.c:817
        code = 16
        type = 12
        ss = 16
        esp = 0
        softseg = {ssd_base = 0, ssd_limit = 1048575, ssd_type = 27,
  ssd_dpl = 0, ssd_p = 1, ssd_xx = 1, ssd_xx1 = 0, ssd_def32 = 1, ssd_gran = 1}
#4  0xc0611ed4 in trap_pfault (frame=0xe6448b80, usermode=0, eva=3217260568)
    at /usr/src/sys/i386/i386/trap.c:735
        va = 3217260544
        vm = (struct vmspace *) 0x0
        map = 0xc0673280
        rv = 1
        ftype = 1 '\001'
        td = (struct thread *) 0xc313bd80
        p = (struct proc *) 0xc313a54c
#5  0xc0611ab9 in trap (frame=
      {tf_fs = -1022033896, tf_es = 16, tf_ds = -431751152, tf_edi = -10217512\
96, tf_esi = -1017843008, tf_ebp = -431715292, tf_isp = -431715412, tf_ebx = -\
1008379904, tf_edx = 0, tf_ecx = 234907650, tf_eax = 57350, tf_trapno = 12, tf\
_err = 0, tf_eip = -1067469665, tf_cs = 8, tf_eflags = 66055, tf_esp = -431715\
256, tf_ss = -1021353488}) at /usr/src/sys/i386/i386/trap.c:425
        td = (struct thread *) 0xc313bd80
        p = (struct proc *) 0xc313a54c
        sticks = 3863251848
        i = 0
        ucode = 0
        type = 12
        code = 0
        eva = 3217260568
#6  0xc05fdc4a in calltrap () at /usr/src/sys/i386/i386/exception.s:140
No locals.
#7  0xc3150018 in ?? ()
No symbol table info available.
#8  0x00000010 in ?? ()
No symbol table info available.
#9  0xe6440010 in ?? ()
No symbol table info available.
#10 0xc3195000 in ?? ()
No symbol table info available.
#11 0xc354f2c0 in ?? ()
No symbol table info available.
#12 0xe6448c24 in ?? ()
No symbol table info available.
#13 0xe6448bac in ?? ()
No symbol table info available.
#14 0xc3e55800 in ?? ()
No symbol table info available.
#15 0x00000000 in ?? ()
No symbol table info available.
#16 0x0e006802 in ?? ()
No symbol table info available.
#17 0x0000e006 in ?? ()
No symbol table info available.
#18 0x0000000c in ?? ()
No symbol table info available.
#19 0x00000000 in ?? ()
No symbol table info available.
#20 0xc05fb49f in bus_dmamap_load (dmat=0xc3353400, map=0x0, buf=0xe006802,
    buflen=2046, callback=0xc045f8e8 <em_dmamap_cb>, callback_arg=0xe6448c48,
    flags=0) at pmap.h:200
        lastaddr = 0
        error = 0
        nsegs = 0
195             vm_paddr_t pa;
196
197             if ((pa = PTD[va >> PDRSHIFT]) & PG_PS) {
198                     pa = (pa & ~(NBPDR - 1)) | (va & (NBPDR - 1));
199             } else {
200                     pa = *vtopte(va);
201                     pa = (pa & PG_FRAME) | (va & PAGE_MASK);
202             }
203             return pa;
204     }
#21 0xc04602f1 in em_get_buf (i=88, adapter=0xc3195000, nmp=0x0)
    at /usr/src/sys/dev/em/if_em.c:2531
        mp = (struct mbuf *) 0xc3e55800
        rx_buffer = (struct em_buffer *) 0xc354f2c0
        ifp = (struct ifnet *) 0xc354f2c0
        paddr = 3272850816
        error = -1021751296
2526
2527            /*
2528             * Using memory from the mbuf cluster pool, invoke the
2529             * bus_dma machinery to arrange the memory mapping.
2530             */
2531            error = bus_dmamap_load(adapter->rxtag, rx_buffer->map,
2532                                    mtod(mp, void *), mp->m_len,
2533                                    em_dmamap_cb, &paddr, 0);
2534            if (error) {
2535                    m_free(mp);
#22 0xc0460b6e in em_process_receive_interrupts (adapter=0xc3195000, count=-2)
    at /usr/src/sys/dev/em/if_em.c:2852
        ifp = (struct ifnet *) 0xc3195000
        mp = (struct mbuf *) 0xc3638500
        accept_frame = 1 '\001'
        eop = 1 '\001'
        len = 60
        desc_len = 0
        prev_len_adj = 0
        i = 88
        current_desc = (struct em_rx_desc *) 0xc31da580
2847                            }
2848                    }
2849
2850                    if (accept_frame) {
2851
2852                            if (em_get_buf(i, adapter, NULL) == ENOBUFS) {
2853                                    adapter->dropped_pkts++;
2854                                    em_get_buf(i, adapter, mp);
2855                                    if (adapter->fmp != NULL)
2856                                            m_freem(adapter->fmp);
#23 0xc045d8ae in em_intr (arg=0xc3195000) at /usr/src/sys/dev/em/if_em.c:1025
        loop_cnt = 3
        reg_icr = 0
        ifp = (struct ifnet *) 0xc3195000
        adapter = (struct adapter *) 0xc3195000
1021            }
1022
1023            while (loop_cnt > 0) {
1024                    if (ifp->if_flags & IFF_RUNNING) {
1025                            em_process_receive_interrupts(adapter, -1);
1026                            em_clean_transmit_interrupts(adapter);
1027                    }
1028                    loop_cnt--;
1029            }
#24 0xc04a8e1b in ithread_loop (arg=0xc312b480)
    at /usr/src/sys/kern/kern_intr.c:547
        ithd = (struct ithd *) 0xc312b480
        ih = (struct intrhand *) 0xc31e3400
        td = (struct thread *) 0xc313bd80
        p = (struct proc *) 0xc313a54c
        count = 0
        warming = 0
        warned = 0
542                                             mtx_unlock(&ithd->it_lock);
543                                             goto restart;
544                                     }
545                                     if ((ih->ih_flags & IH_MPSAFE) == 0)
546                                             mtx_lock(&Giant);
547                                     ih->ih_handler(ih->ih_argument);
548                                     if ((ih->ih_flags & IH_MPSAFE) == 0)
549                                             mtx_unlock(&Giant);
550                             }
551                             if (ithd->it_enable != NULL) {
#25 0xc04a7b8d in fork_exit (callout=0xc04a8c77 <ithread_loop>, arg=0x0,
    frame=0x0) at /usr/src/sys/kern/kern_fork.c:791
        p = (struct proc *) 0xc313a54c
        td = (struct thread *) 0x0
786              * cpu_set_fork_handler intercepts this function call to
787              * have this call a non-return function to stay in kernel mode.
788              * initproc has its own fork handler, but it does return.
789              */
790             KASSERT(callout != NULL, ("NULL callout in fork_exit"));
791             callout(arg, frame);
792
793             /*
794              * Check if a kernel thread misbehaved and returned from its m\
ain
795              * function.
(kgdb) p callout
$1 = (void (*)(void *, struct trapframe *)) 0xc04a8c77 <ithread_loop>
#26 0xc05fdcac in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:209
No locals.


More information about the freebsd-stable mailing list