On Fri, Mar 06, 2015 at 09:15:23AM +0100, Stefan Sperling wrote: > On Fri, Mar 06, 2015 at 08:45:20AM +0100, Remi Locherer wrote: > > Hi, > > > > Since about fall 2014 I see "urtwn0 timeout" every now an then like > > others that reported it. An unplug and replut of the urtwn device > > usually helped. > > > > But with the snapshots from March 1st and 3rd the system just freezes > > when I unplug the urtwn device after I see the timeout message in > > xconsole. The system just freezes and does not drop to ddb. > > > > With the snapshot from February 20 I did not observe these freezes. > > > > Outputs of lsusb -v and dmesg below. > > > > Remi > > > > Hi Remi, > > I've discussed this with mpi. We're unsure what's going on exactly. > > Can you please really make sure you're not dropping into ddb (i.e. > don't detach the device while in X, but when on console)?
Your assumption is right! Switching from X to console _before_ unplugging the urtwn device gives me an ddb promt. I made photos from trace and ps: * page fault trap: https://relo.ch/urtwn_freeze/IMG_20150306_184105.jpg * trace cpu 0 - 3: https://relo.ch/urtwn_freeze/IMG_20150306_192412.jpg * ps part 1: https://relo.ch/urtwn_freeze/IMG_20150306_192537.jpg * ps part 2: https://relo.ch/urtwn_freeze/IMG_20150306_192708.jpg I'll apply the below diff and report back with the results. > Can you please apply this diff and let us know if you see any STATUS=? > lines with it when the problem happens (again, console, not X)? > > Thanks. > > Index: if_urtwn.c > =================================================================== > RCS file: /cvs/src/sys/dev/usb/if_urtwn.c,v > retrieving revision 1.42 > diff -u -p -r1.42 if_urtwn.c > --- if_urtwn.c 10 Feb 2015 23:25:46 -0000 1.42 > +++ if_urtwn.c 6 Mar 2015 08:12:23 -0000 > @@ -1635,7 +1635,7 @@ urtwn_rxeof(struct usbd_xfer *xfer, void > int len, totlen, pktlen, infosz, npkts; > > if (__predict_false(status != USBD_NORMAL_COMPLETION)) { > - DPRINTF(("RX status=%d\n", status)); > + printf("RX status=%d\n", status); > if (status == USBD_STALLED) > usbd_clear_endpoint_stall_async(sc->rx_pipe); > if (status != USBD_CANCELLED) > @@ -1703,7 +1703,7 @@ urtwn_txeof(struct usbd_xfer *xfer, void > TAILQ_INSERT_TAIL(&sc->tx_free_list, data, next); > > if (__predict_false(status != USBD_NORMAL_COMPLETION)) { > - DPRINTF(("TX status=%d\n", status)); > + printf("TX status=%d\n", status); > if (status == USBD_STALLED) > usbd_clear_endpoint_stall_async(data->pipe); > ifp->if_oerrors++; >