Hi,

On Thu, Nov 03, 2016 at 02:12:58PM +0100, Oliver Neukum wrote:
> On Thu, 2016-11-03 at 13:44 +0100, Ladislav Michl wrote:
> > On Thu, Nov 03, 2016 at 01:03:56PM +0100, Ladislav Michl wrote:
> 
> Hi,
> 
> > > now I'm really confused. Just looked at drivers/usb/serial/generic.c
> > > which just stops submitting urbs on -EPIPE. On contrary
> > > drivers/usb/serial/ti_usb_3410_5052.c does just the opposite.
> > > I'm assuming generic function does it right, but what do you
> > > mean by "clearing a halt"?
> > 
> > This really feels like opening Pandora's box... So usb generic is submitting
> > read urbs on all error except -EPIPE (and -ENOENT, -ECONNRESET, -ESHUTDOWN
> > of course). cypress_m8 stops submitting on all errors and adds comment
> > "Can't call usb_clear_halt while in_interrupt" to -EPIPE case.
> 
> True. That driver is so old that the error was hard to handle.
> 
> > Edgeport and TI 3410/5052 drivers has special case for -EPIPE where they
> > continue submitting read urbs. There's pretty clear pattern showing which
> > driver is derived from other, but all of them simply cannot be right.
> 
> They are for different hardware.

Yes, they are, but those which do continue submiting urbs after -EPIPE
do not bother with usb_clear_halt.

> > Also usb_clear_halt is called only from open in all drivers which do care
> > about clearing a halt at all.
> 
> No. For example look at usbnet.

I see. I was looking only for serial drivers.

> > Any pointers how should be such a error condition solved properly?
> > (I didn't find any documentation and existing drivers do just the opposite)
> 
> I think the way usbnet handles -EPIPE is the best. We are a bit on thin
> ice because the CDC spec does not list under which conditions we should
> see a stall, thus by implication: never.
> But in general you cannot ignore a stall. You need to clear the halt.

So, you'd like to see normal urb processing and fire completion callback
which does usb_clear_halt on -EPIPE. Is that right?

> We cannot do full error handling for modems because they would drop
> the connection if we reset the device.

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

Reply via email to