USB: EHCI: check for STALL before other errors
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 29 Jun 2009 21:36:14 +0000 (17:36 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 12 Jul 2009 22:16:39 +0000 (15:16 -0700)
commitba516de332c0e574457e58fb5aa0293e628b7b10
treea3b36a84db2c0ae0da8762061d3566fe94138125
parent914b701280a76f96890ad63eb0fa99bf204b961c
USB: EHCI: check for STALL before other errors

This patch (as1257) revises the way ehci-hcd detects STALLs.  The
logic is a little peculiar because there's no hardware status bit
specifically meant to indicate a STALL.  You just have to guess that a
STALL was received if the BABBLE bit (which is fatal) isn't set and
the transfer stopped before all its retries were used up.

The existing code doesn't do this properly, because it tests for MMF
(Missed MicroFrame) and DBE (Data Buffer Error) before testing the
retry counter.  Thus, if a transaction gets either MMF or DBE the
corresponding flag is set and the transaction is retried.  If the
second attempt receives a STALL then -EPIPE is the correct return
value.  But the existing code would see the MMF or DBE flag instead
and return -EPROTO, -ENOSR, or -ECOMM.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/ehci-q.c