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