On Sunday 18 March 2007 8:16 pm, Li Yang-r58472 wrote:
> > -----Original Message-----
> > From: David Brownell [mailto:[EMAIL PROTECTED]
> > Sent: Saturday, March 17, 2007 6:38 AM
> > To: linux-usb-devel@lists.sourceforge.net
> > Cc: Li Yang-r58472; [EMAIL PROTECTED]
> > Subject: Re: [linux-usb-devel] [PATCH] Fix gadget serial response on
> > USB_CDC_REQ_SET_LINE_CODING
> > 
> > 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.
> 
> Memcpy() the line_coding from host to the private port_line_coding
> structure doesn't mean the port is really changed.  Port_line_coding
> structure isn't used anywhere in the driver accept it fools around the
> next USB_CDC_REQ_GET_LINE_CODING request from host.

So if it's not used ... in what sense is the port *NOT* changed?

Remember, it's not hooked up to a serial line right now.  And other
than asking for 8N1 (etc) "coding", that would be the only way to
observe changes.

That is, if the memcpy were done *correctly* there would be no way
to demonstrate what you're claiming.  Because every testable behavior
would show the opposite.


> > 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.
> 
> I knew it was not a complete fix. 

It's not a "fix" at all.  It swapped one bug for a more polite one.


> But I didn't have the time and 
> knowledge to add support to this function.

See above.  All those ep0out transfers have the same bug:  in
the initial setup() call they must issue a read request to ep0,
and doing the memcpy when that completes.  Instead, they are
wrongly assuming the read request was already issued.


> Moreover, this is an 
> optional function for CDC class, so it is all right to leave it
> unsupported.

Which is why I asked you to either do a real fix, or at least change
both instances of this bug and provide a correct description of
what's being changed.

- Dave

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