[pvrusb2] usb weakiness and streaming errors

Ingo Flaschberger if at xip.at
Tue Jan 3 16:34:18 CST 2006


Hi

>> I have a Via eapia board, an Via usb 2.0 controller and a 5m active usb 
>> repeater cable. (Not very ideal setup, I know).
>> 
>> Sometimes, the server has usb errors:
>> kernel: ehci_hcd 0000:00:10.3: devpath 2.1 ep4in 3strikes
>> kernel: pvrusb2 /*---TRACE_READ---*/ data is available
>> kernel: pvrusb2 /*---TRACE_READ---*/ pvr2_ioread_read id=c8e7fc80 
>> buffer_error=-71
>
> Well that's a first, in code that has not changed in quite a while. First 
> guess is that something hiccupped involving USB bulk transfers. The first 
> error message you printed came from the USB core not the pvrusb2 driver, 
> which suggests strongly that something went wrong at a level lower than the 
> driver.  But I'll need to go back and look at this code to see what the 
> nature of the error is.

hardware probs..
kernels comment:
---snip---
/* serious "can't proceed" faults reported by the hardware */
         if (token & QTD_STS_HALT) {
                 if (token & QTD_STS_BABBLE) {
                         /* FIXME "must" disable babbling device's port too 
*/
                         urb->status = -EOVERFLOW;
                 } else if (token & QTD_STS_MMF) {
                         /* fs/ls interrupt xfer missed the complete-split 
*/
                         urb->status = -EPROTO;
                 } else if (token & QTD_STS_DBE) {
                         urb->status = (QTD_PID (token) == 1) /* IN ? */
                                 ? -ENOSR  /* hc couldn't read data */
                                 : -ECOMM; /* hc couldn't write data */
                 } else if (token & QTD_STS_XACT) {
                         /* timeout, bad crc, wrong PID, etc; retried */
                         if (QTD_CERR (token))
                                 urb->status = -EPIPE;
                         else {
                                 ehci_dbg (ehci, "devpath %s ep%d%s 3strikes\n",
 					         ^^^^^^^^^^^^^^^^^^^^^^^^^^
                                         urb->dev->devpath,
                                         usb_pipeendpoint (urb->pipe),
                                         usb_pipein (urb->pipe) ? "in" : "out");
                                 urb->status = -EPROTO;
                         }
---snap---

Seems to be some problems of the via chipset.

>> and pvrusb2 gets an error in pvrusb2-ioread.c; pvr2_ioread_read() line 273 
>> and stops the stream, /dev/video0 gets an read error and mythtv freaks ok.
>> 
>> my really heavy hotfix was, to exclude the next lines and ignore the error:
>> 	pvr2_ioread_stop(cp);
>> 	ret = -EIO;
>> 	break;
>> 
>> and it works.. now. perhaps you know a better way to handle that... Need a 
>> tip and I will do the fix then.
>
> I will investigate.  You might have found a way to recover from such a 
> problem.  Not having had that problem here (yet) naturally there's no error 
> recovery...

Thanks :)
The recover from the problem is a "russion" solution, just ignoring the 
problem. Works very well *g* now since 30 minutes and a lot of usb errors.

bye,
 	Ingo


More information about the pvrusb2 mailing list