Re: Bulk transfers freeze after a random time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alan,

On Friday 25 February 2011 20:00:23 Alan Stern wrote:
> On Thu, 24 Feb 2011, Laurent Pinchart wrote:
> > Hi everybody,
> > 
> > I've been trying to solve a weird bulk transfers issue for a couple of
> > weeks in the uvcvideo driver. It now seems the problem lies in the lower
> > layers (or even possibly in the device), so I'd appreciate some help to
> > shed light on this.
> > 
> > Background information: kernel 2.6.37, EHCI controller, two identical (as
> > far as the USB interface is concerned) UVC devices plugged into the root
> > hub. The host sends MJPEG compressed video data to the devices (UVC
> > allows for video output as well as capture) through bulk endpoints.
> > 
> > After a random time, one of the device seems to hang. It stops receiving
> > data on the bulk endpoint. On the host side, the uvcvideo driver submits
> > its bulk URBs correctly until the hang occurs, at which point the
> > completion callback stops being called. No error is being reported in
> > the last calls to the completion callback, and usb_submit_urb() always
> > returns success. The other device continues to receive data correctly.
> > No message is printed to the kernel log at that point. Turning USB
> > verbose debugging on doesn't show any additional message in the kernel
> > log when the freeze occurs.
> > 
> > A USB analyzer showed that bulk transfers stop completely for the device
> > that hangs. Three screenshots of the trace can be found at
> > 
> > http://www.ideasonboard.com/usb/usb-trace-1.jpg
> > http://www.ideasonboard.com/usb/usb-trace-2.jpg
> > http://www.ideasonboard.com/usb/usb-trace-3.jpg
> > 
> > They have all been taken in separate runs of the application.
> 
> These screenshots aren't definitive.  The first shows a bulk transfer
> to device 6 ending with an NYET handshake, but it doesn't show what
> happens afterward.  The host controller is supposed to send PING
> packets to the device, which replies with ACK when it is ready to
> receive more data.  The screenshot doesn't show if this happened.
> 
> The second screenshot is similar.  Are the PING packets getting
> filtered out?
>
> The third screenshot shows a bunch of 0-byte transfers.  Most likely
> that's what the application is sending.  A usbmon trace would say for
> sure.
> 
> > It seems that the device which hangs is the one that is first plugged
> > into the system (lowest USB address), but this could be a coincidence.
> > The bulk payloads have variable sizes, and it seems the first 1-byte
> > bulk packet triggers the freeze (this can again be a coincidence). The
> > freeze occured at least once without a 1-byte bulk packet though. It
> > also seems that the freeze can't be reproduced when only one of the
> > devices is in use.
> > 
> > When the transfer freezes, disconnecting/reconnecting the device is
> > required to recover from the problem. Stopping the video stream,
> > unloading/reloading the uvcvideo driver and restarting the video stream
> > isn't enough (no bulk packet can be transferred at all in that case).
> > Physically
> > disconnecting/reconnecting the device works, as well as triggering a
> > disconnection/reconnection through the control endpoint (the device
> > implements a couple of custom debugging commands, including one which
> > switches its operation mode and triggers a USB disconnection). This
> > means that endpoint 0 still responds correctly.
> > 
> > All help will be appreciated. I've got a couple of (very long) usbmon
> > traces available if needed. I can also provide specific usbmon traces or
> > kernel logs, and of course try patches.
> 
> Try examining your analyzer data in more detail, looking for PING
> packets and the responses.  If the device never replies with ACK then
> it is hung.  If you see any more of those 0-byte transactions, compare
> them against the usbmon trace.

It seems so. I've asked for more traces to be captured, and it turns out that 
the device (based on a CY7C68001 chip) keeps NAKing PING packets. The problem 
is thus on the device side (where exactly remains to be found out, but that's 
not a linux-usb issue :-)).

Thanks for your help.

-- 
Regards,

Laurent Pinchart
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux