On Wednesday 14 March 2007 5:18 am, Li Yang wrote:
> Apparently this gadget doesn't support setting usb_cdc_line_coding.

It does support it ... but that support is buggy.  It should be issuing
a read request before doing the memcpy(); instead, it wrongly assumes
that something else already issued the read.

Plus, it doesn't correctly test for some error cases:  port is null,
there's not enough incoming data.


> But the code pretends that it supports, and queues a zero length
> request for the DATA phase.  That will cause overflow for udc in
> processing the DATA transaction.  The patch make it return -EOPNOTSUPP
> and stall cleanly.

So, a workaround for the bug.  Did you notice how the other SET
request has the same bug?

If you're not going to really fix this, please update the patch
to address the same bug in the other path; and its description
to say that you're replacing buggy code with an explicit failure.

Best of course would be to fix the underlying bugs, since you
clearly have a test setup and the fixes should be trivial, more or
less

        if (wLength == right length) {
                update req->complete
                ret = right length
        }

and providing new completion handlers which copy the data.

- Dave


> Signed-off-by: Li Yang <[EMAIL PROTECTED]>
> ---
> 
> diff --git a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c
> index e552668..0911bc4 100644
> --- a/drivers/usb/gadget/serial.c
> +++ b/drivers/usb/gadget/serial.c
> @@ -1692,14 +1692,7 @@ static int gs_setup_class(struct usb_gadget *gadget,
>  
>       switch (ctrl->bRequest) {
>       case USB_CDC_REQ_SET_LINE_CODING:
> -             ret = min(wLength,
> -                     (u16)sizeof(struct usb_cdc_line_coding));
> -             if (port) {
> -                     spin_lock(&port->port_lock);
> -                     memcpy(&port->port_line_coding, req->buf, ret);
> -                     spin_unlock(&port->port_lock);
> -             }
> -             ret = 0;
> +             /* FIXME: We don't support set line coding */
>               break;
>  
>       case USB_CDC_REQ_GET_LINE_CODING:
> 
> 
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> linux-usb-devel@lists.sourceforge.net
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
> 

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to