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++;
> 

Reply via email to