Fix a driver hang caused by earlier suspend/resume cycles. By handling a
ENODEV error during suspend as a real error we eventually end up stopping
the whole driver.

Fix this by handling the ENODEV error (during suspend) essentially by
retrying.

Signed-off-by: Hemmo Nieminen <hemmo.niemi...@iki.fi>
---
 drivers/staging/rtl8712/usb_ops_linux.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/rtl8712/usb_ops_linux.c 
b/drivers/staging/rtl8712/usb_ops_linux.c
index e77be2a..03aac59 100644
--- a/drivers/staging/rtl8712/usb_ops_linux.c
+++ b/drivers/staging/rtl8712/usb_ops_linux.c
@@ -228,16 +228,19 @@ static void r8712_usb_read_port_complete(struct urb *purb)
                }
        } else {
                switch (purb->status) {
-               case -ENOENT:
-                       if (padapter->bSuspended)
-                               break;
-                       /* Fall through. */
                case -EINVAL:
                case -EPIPE:
                case -ENODEV:
                case -ESHUTDOWN:
                        padapter->bDriverStopped = true;
                        break;
+               case -ENOENT:
+                       if (!padapter->bSuspended)
+                       {
+                               padapter->bDriverStopped = true;
+                               break;
+                       }
+                       /* Fall through. */
                case -EPROTO:
                        precvbuf->reuse = true;
                        r8712_read_port(padapter, precvpriv->ff_hwaddr, 0,
-- 
2.7.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to