On Monday 26 March 2007 16:13, Markus Henschel wrote:
> >Number:         110855
> >Category:       usb
> >Synopsis:       ugen: interrupt in msgs are truncated when buffer is full
> >Confidential:   no
> >Severity:       serious
> >Priority:       medium
> >Responsible:    freebsd-usb
> >State:          open
> >Quarter:
> >Keywords:
> >Date-Required:
> >Class:          change-request
> >Submitter-Id:   current-users
> >Arrival-Date:   Mon Mar 26 14:20:04 GMT 2007
> >Closed-Date:
> >Last-Modified:
> >Originator:     Markus Henschel
> >Release:        6.2 custom kernel
> >Organization:
>
> Bally Wulff Automaten GmbH
>
> >Environment:
>
> FreeBSD freebsd-1.bally.de 6.2-RELEASE FreeBSD 6.2-RELEASE #11: Fri Mar 23
> 21:28:38 CET 2007    
> [EMAIL PROTECTED]:/usr/obj/usr/src/sys/BALLYWULFF  i386
>
> >Description:
>
> We use ugen for some user space drivers. When an interrupt in endpoint is
> used ugen creates a queue that is filled by the kernel. The user space
> driver is responsible for reading data from the device file. If this
> happens too slow the queue is full and new msgs arriving from the usb
> device are lost. This behavior is OK.
>
> The problem is that the queue is not a multiple of the interrupt in
> endpoints msgs size. So it is possible that the last msg in the queue is
> truncated. This is very hard to detect for a user space driver. The data
> stream seen by the user space driver will contain an incomplete msgs
> directly followed by the next message without knowing truncation happened
> (except when using some data corruption detection mechanism).
>
> It would be much better if ugen would fill the queues of interrupt in
> endpoints until there is no more space for a complete msg. This way the
> user space driver will not loose sync with the incoming msgs.

The new USB stack has this fixed already. What I do is that the USB driver 
stops polling the interrupt endpoint when the user-land application does not 
read data. When the user-land application has read a packet, the interrupt 
endpoint is started again. The only problem is that some devices, like a 
Microsoft mouse I have, stops working immediately when its internal buffer 
overflows. Bad hardware design. But if your hardware is not like that, the 
new ugen, which is part of the new USB driver, will work great for you.

Also packet alignment is kept between reads: Only one packet per read.

See:

http://www.turbocat.net/~hselasky/usb4bsd

--HPS
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to