On Tue, Apr 28, 2015 at 10:17:16AM +0200, Martin Pieuchot wrote:
> On 27/04/15(Mon) 22:45, Remi Locherer wrote:
> > On Mon, Apr 27, 2015 at 03:13:06PM +0200, Martin Pieuchot wrote:
> > > This trace tells use that the pipe is no longer valid, which means that
> > > the device has been removed but a xfer is still referenced by ehci.
> > > 
> > > The output of "ps" could help understand what's going wrong in such
> > > case.  If you can, please get it next time :)
> > > 
> > > If you think you can reproduce this bug too, here's a diff that would
> > > get us a useful trace:
> > 
> > It seams to be easier to trigger this bug than the first one.
> 
> What did you do to trigger it?

While lynx was loading a website (via ipv6) I unplugged the urtwn device.
The panic doesn't happen every time I try this. Maybe every 10th time.

> > ddb trace and ps output:
> > 
> > https://relo.ch/urtwncrash_trace_part1.jpg
> > https://relo.ch/urtwncrash_trace_part2.jpg
> > https://relo.ch/urtwncrash_ps_part1.jpg
> > https://relo.ch/urtwncrash_ps_part2.jpg
> > 
> > Unfortunately "boot reboot" in ddb did not work so I had to upload 
> > the photos. But at least one line number appeared in the output so now I
> > know how to build a kernel with debug symbols ;)
> > 
> > 
> > > 
> > > Index: usbdi.c
> > > ===================================================================
> > > RCS file: /cvs/src/sys/dev/usb/usbdi.c,v
> > > retrieving revision 1.81
> > > diff -u -p -r1.81 usbdi.c
> > > --- usbdi.c       14 Mar 2015 03:38:50 -0000      1.81
> > > +++ usbdi.c       27 Apr 2015 13:08:33 -0000
> > > @@ -824,10 +824,8 @@ usb_insert_transfer(struct usbd_xfer *xf
> > >   DPRINTFN(5,("usb_insert_transfer: pipe=%p running=%d timeout=%d\n",
> > >       pipe, pipe->running, xfer->timeout));
> > >  #ifdef DIAGNOSTIC
> > > - if (xfer->busy_free != XFER_FREE) {
> > > -         printf("%s: xfer=%p not free\n", __func__, xfer);
> > > -         return (USBD_INVAL);
> > > - }
> > > + if (xfer->busy_free != XFER_FREE)
> > > +         panic("%s: xfer=%p not free\n", __func__, xfer);
> > >   xfer->busy_free = XFER_ONQU;
> > >  #endif
> > >   s = splusb();
> > > 
> > 
> 

Reply via email to