Re: Linux UVC driver can not handle urb_submit error

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

 



Hi Alan,

On Tuesday 07 June 2011 15:34:48 Alan Stern wrote:
> On Tue, 7 Jun 2011, Laurent Pinchart wrote:
> > On Tuesday 31 May 2011 17:53:03 Soho Soho123 wrote:
> > > Dear Laurent,
> > > =======================================================================
> > > ==== Let me explain my problem again.
> > > We use MJPG-streamser to test IP Cam function. the network interface
> > > is WiFi. WebCam is using UVC driver.
> > > We have the issue is the stream will disconnect in a few minutes on
> > > our embedded system.
> > > the reason is : the call back function of uvc urb complete can not
> > > re-submit urb successfully. The error code is "-EFBIG". EHCI driver
> > > think the urb submit is too late.
> > > the ip cam test condition is 1280x720 30 fps via WiFi(802.11n).
> > > the call back function seems take more cpu cycles when itd_complete,
> > > because it decode data and re-submit urb . the call back function is
> > > included in ehci irq path. it may increase irq latency.
> > > Do you have idea about :
> > > is it "must" decode data in uvcvideo complete call back function?
> > > is it "must" re-submit urb in uvcvideo complete call back function?
> > 
> > The URB completion callback performs the following operations.
> > 
> > - Header decoding. Every UVC packet starts with a header that contains a
> > couple of bit flags. Those flags are processed to detect image boundaries
> > and errors.
> > 
> > - Data copy. If the packet contains payload data (as opposed to packets
> > with a header only), the payload is copied to another buffer. Whether
> > the device will send many small isochronous packets or few big ones is
> > entirely up to the device, but in the end the same amount of data will
> > be copied. At most 3070 bytes will be copied per URB.
> > 
> > - Video buffer completion. If the driver detects that a frame is
> > complete, it will wake tasks waiting on the buffer.
> > 
> > This can't really be optimized without removing URB processing from
> > interrupt context completely. I could just queue the URB buffers to a
> > list and process them in a workqueue. URBs could then be resubmitted
> > faster, with another buffer. However, if the platform isn't fast enough,
> > the URB completion callback will run out of buffers and will thus loose
> > data.
> > 
> > How much time are drivers allowed to spend in the URB completion callback
> > ? Why does the EHCI driver require very low latency there ? If the URB
> > is resubmitted too late, why can't it just be queued for the next
> > (micro-)frame ?
> 
> Never mind...  This turned out to be a false alarm.  Soho's problem
> wasn't caused by excessive time in the uvcvideo callback; it was caused
> by some completely different driver blocking interrupt delivery for
> more than 40 ms at a time.
> 
> Sorry for the trouble.

No worries.

Do you think I should try to reduce the amount of operations performed by the 
uvcvideo driver in the URB completion callback by moving them to a workqueue, 
or is the current driver behaviour (as described above) acceptable ?

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