OSDN Git Service

staging: rtl8712: Improve suspend/resume functionality.
authorHemmo Nieminen <hemmo.nieminen@iki.fi>
Fri, 19 Feb 2016 19:02:24 +0000 (21:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Feb 2016 23:18:33 +0000 (15:18 -0800)
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.nieminen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8712/usb_ops_linux.c

index e77be2a..c2ac581 100644 (file)
@@ -228,16 +228,18 @@ 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,