usb/101096: USB WLAN occasionally causes kernel-panics during
large downloads
Hans Petter Selasky
hselasky at c2i.net
Mon Jul 31 14:40:24 UTC 2006
The following reply was made to PR usb/101096; it has been noted by GNATS.
From: Hans Petter Selasky <hselasky at c2i.net>
To: freebsd-usb at freebsd.org
Cc: "Pascal G. Hofstee" <caelian at gmail.com>,
freebsd-gnats-submit at freebsd.org
Subject: Re: usb/101096: USB WLAN occasionally causes kernel-panics during large downloads
Date: Mon, 31 Jul 2006 16:32:55 +0200
On Monday 31 July 2006 15:18, Pascal G. Hofstee wrote:
> >Number: 101096
> >Category: usb
> >Synopsis: USB WLAN occasionally causes kernel-panics during large
> > downloads Confidential: no
> >Severity: critical
> >Priority: medium
> >Responsible: freebsd-usb
> >State: open
> >Quarter:
> >Keywords:
> >Date-Required:
> >Class: sw-bug
> >Submitter-Id: current-users
> >Arrival-Date: Mon Jul 31 13:20:13 GMT 2006
> >Closed-Date:
> >Last-Modified:
> >Originator: Pascal G. Hofstee
> >Release: FreeBSD/i386 6.1-RELEASE
> >Organization:
> >Environment:
>
> FreeBSD chekov.ufp.fli4l 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sat Jul 29
> 19:29:11 CEST 2006 pascal at aragorn.alex:/usr/obj/usr/src/sys/CHEKOV
> i386
>
> >Description:
>
> DUring downloads of large documentrs over my USB WLAN interface (if_ural
> driver) the system occasionally breaks down because of kernel-panics.
>
>
> Script started on Mon Jul 32 14:59:09 2006
> [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:
> Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you
> are welcome to change it and/or distribute copies of it under certain
> conditions. Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "i386-marcel-freebsd".
>
> Unread portion of the kernel message buffer:
>
>
> Fatal trap 12: page fault while in kernel mode
> fault virtual address = 0x4
> fault code = supervisor read, page not present
> instruction pointer = 0x20:0xc077be82
> stack pointer = 0x28:0xcc1b1bb4
> frame pointer = 0x28:0xcc1b1bd4
> 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 = 23 (irq10: pcm0 uhci0+)
> trap number = 12
> panic: page fault
> Uptime: 1d1h7m46s
> Dumping 255 MB (2 chunks)
> chunk 0: 1MB (159 pages) ... ok
> chunk 1: 255MB (65276 pages) 240 224 208 192 176 160 144 128 112 96 80 64
> 48 32 16
>
> #0 doadump () at pcpu.h:165
> 165 pcpu.h: No such file or directory.
> in pcpu.h
> (kgdb) bt full
> #0 doadump () at pcpu.h:165
> No locals.
> #1 0xc06cdbd7 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:402
> first_buf_printf = 1
> #2 0xc06cdf19 in panic (fmt=0xc097a0bb "%s")
> at /usr/src/sys/kern/kern_shutdown.c:558
> td = (struct thread *) 0xc253d300
> bootopt = 260
> newpanic = 0
> ap = 0xc253d300 ""
> buf = "page fault", '\0' <repeats 245 times>
> #3 0xc092b73c in trap_fatal (frame=0xcc1b1b74, eva=0)
> at /usr/src/sys/i386/i386/trap.c:836
> code = 40
> type = 12
> ss = 40
> esp = 0
> softseg = {ssd_base = 0, ssd_limit = 1048575, ssd_type = 27,
> ssd_dpl = 0, ssd_p = 1, ssd_xx = 0, ssd_xx1 = 0, ssd_def32 = 1,
> ssd_gran = 1}
> msg = 0x0
> #4 0xc092b412 in trap_pfault (frame=0xcc1b1b74, usermode=0, eva=4)
> at /usr/src/sys/i386/i386/trap.c:744
> va = 0
> vm = (struct vmspace *) 0x0
> map = 0x1
> rv = 1
> ftype = 1 '\001'
> td = (struct thread *) 0xc253d300
> p = (struct proc *) 0xc260d000
> #5 0xc092afad in trap (frame=
> {tf_fs = -1066598392, tf_es = -1034747864, tf_ds = 40, tf_edi =
> -1033379840, tf_esi = 0, tf_ebp = -870638636, tf_isp = -870638688, tf_ebx =
> -1033376556, tf_edx = -1033606400, tf_ecx = -1033699328, tf_eax = 0,
> tf_trapno = 12, tf_err = 0, tf_eip = -1065894270, tf_cs = 32, tf_eflags =
> 66182, tf_esp = -1033601280, tf_ss = -1033601248}) at
> /usr/src/sys/i386/i386/trap.c:434 td = (struct thread *) 0xc253d300
> p = (struct proc *) 0xc260d000
> sticks = 0
> i = 0
> ucode = 0
> type = 12
> code = 0
> eva = 4
> #6 0xc09174ba in calltrap () at /usr/src/sys/i386/i386/exception.s:139
> No locals.
> #7 0xc077be82 in ieee80211_free_node (ni=0x0)
> at /usr/src/sys/net80211/ieee80211_node.c:1600
> nt = (struct ieee80211_node_table *) 0xc267ecd4
> __func__ = "ieee80211_free_node"
> #8 0xc0638575 in ural_txeof (xfer=0xc2749b00, priv=0xc267ecd4,
> status=USBD_NORMAL_COMPLETION) at /usr/src/sys/dev/usb/if_ural.c:887
> data = (struct ural_tx_data *) 0xc267ecd4
> sc = (struct ural_softc *) 0xc267e000
> ifp = (struct ifnet *) 0xc269dc00
> #9 0xc0655b83 in usb_transfer_complete (xfer=0xc2749b00)
> at /usr/src/sys/dev/usb/usbdi.c:863
> pipe = 0xc27c7700
> dmap = (usb_dma_t *) 0xc2749b3c
> sync = 0
> erred = 0
> repeat = 0
> polling = 0
> #10 0xc0644f25 in uhci_idone (ii=0x0) at /usr/src/sys/dev/usb/uhci.c:1499
> xfer = 0xc2749b00
> upipe = (struct uhci_pipe *) 0xc27c7700
> std = (uhci_soft_td_t *) 0xc2646b00
> status = 0
> nstatus = 0
> actlen = 120
> #11 0xc0644dd8 in uhci_check_intr (sc=0xc2630000, ii=0xc2749b70)
> at /usr/src/sys/dev/usb/uhci.c:1374
> std = (uhci_soft_td_t *) 0xc2630000
> lstd = (uhci_soft_td_t *) 0xc2646b00
> status = 0
> #12 0xc0644cef in uhci_softintr (v=0xc2630000)
> at /usr/src/sys/dev/usb/uhci.c:1304
> sc = (uhci_softc_t *) 0xc2630000
> ii = (uhci_intr_info_t *) 0x0
> nextii = (uhci_intr_info_t *) 0xc2721970
> #13 0xc0652302 in usb_schedsoftintr (bus=0x0)
> at /usr/src/sys/dev/usb/usb.c:871
> No locals.
> #14 0xc0644c9c in uhci_intr1 (sc=0xc2630000)
> at /usr/src/sys/dev/usb/uhci.c:1274
> status = 1
> ack = 1
> #15 0xc0644a8d in uhci_intr (arg=0xc2630000)
> at /usr/src/sys/dev/usb/uhci.c:1189
> sc = (uhci_softc_t *) 0xc2646b00
> #16 0xc06b34c8 in ithread_execute_handlers (p=0xc260d000, ie=0xc2539800)
> at /usr/src/sys/kern/kern_intr.c:684
> ih = (struct intr_handler *) 0xc262e600
> ihn = (struct intr_handler *) 0xc264a8c0
> #17 0xc06b3636 in ithread_loop (arg=0xc263b570)
> at /usr/src/sys/kern/kern_intr.c:767
> intr_event = (struct intr_thread *) 0xc263b570
> ie = (struct intr_event *) 0xc2539800
> td = (struct thread *) 0xc253d300
> p = (struct proc *) 0xc260d000
> #18 0xc06b1f3f in fork_exit (callout=0xc06b35c0 <ithread_loop>, arg=0x0,
> frame=0x0) at /usr/src/sys/kern/kern_fork.c:805
> p = (struct proc *) 0xc260d000
> td = (struct thread *) 0xc2646b00
> #19 0xc091751c in fork_trampoline () at
> /usr/src/sys/i386/i386/exception.s:208 No locals.
> (kgdb)
> Script done on Mon Jul 31 14:59:41 2006
>
> >How-To-Repeat:
>
> Usually downloading a rather large document through USB WLAN interface
> triggers the crashes, e.g. diablo-jdk15, firefox etc.
>
Hi,
I think the new "if_ural" has this problem fixed, and a couple of others.
Could you have tried the following:
I recommend that you fetch all files from SVN. The SVN port is available from
/usr/ports/devel/subversion . After Subversion is installed you run:
svn --username anonsvn --password anonsvn checkout svn://svn.turbocat.net/i4b
cd i4b/trunk/i4b/FreeBSD.usb
make S=../src package
make install
Follow the "make help" instructions.
It might be a good idea to build all kernel modules.
Before you build the kernel copy the following files into
"/usr/src/sys/dev/usb/":
i4b/trunk/i4b/src/sys/dev/usb/if_ural.c
i4b/trunk/i4b/src/sys/dev/usb/if_uralreg.h
i4b/trunk/i4b/src/sys/dev/usb/if_uralvar.h
NOTE: the kernel build will most likely fail, unless you are using
FreeBSD-7-current. If it fails because there are missing product ID defines,
then just remove these lines from the "ural_devs" structure in "if_ural.c". If
it fails because "IEEE80211_FEXT_SWBMISS" is not defined, then change the
failing code to something like this:
#ifdef IEEE80211_FEXT_SWBMISS
/* enable SW bmiss handling in sta mode */
ic->ic_flags_ext |= IEEE80211_FEXT_SWBMISS;
#endif
Else please report the error, if you cannot resolve it.
--HPS
More information about the freebsd-usb
mailing list