USB: EHCI: reorganize ehci_iaa_watchdog()
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 18 Mar 2013 16:05:19 +0000 (12:05 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 18 Mar 2013 23:05:58 +0000 (16:05 -0700)
This patch (as1635) rearranges the control-flow logic in
ehci_iaa_watchdog() slightly to agree better with the comments.  It
also changes a verbose-debug message to a regular debug message.
Expiration of the IAA watchdog is an unusual event and can lead to
problems; we need to know about it if it happens during debugging.  It
should not be necessary to set a "verbose" compilation option.

No behavioral changes other than the debug message.  Lots of apparent
changes to the source text, though, because the indentation level was
decreased.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/ehci-timer.c

index cc9ad5892d19f445a956750b171ad21ce81543ee..97815d0fc97c7f4d8db88a7ad5268b5466b6f5b1 100644 (file)
@@ -295,8 +295,7 @@ static void end_free_itds(struct ehci_hcd *ehci)
 /* Handle lost (or very late) IAA interrupts */
 static void ehci_iaa_watchdog(struct ehci_hcd *ehci)
 {
-       if (ehci->rh_state != EHCI_RH_RUNNING)
-               return;
+       u32 cmd, status;
 
        /*
         * Lost IAA irqs wedge things badly; seen first with a vt8235.
@@ -304,34 +303,32 @@ static void ehci_iaa_watchdog(struct ehci_hcd *ehci)
         * (a) SMP races against real IAA firing and retriggering, and
         * (b) clean HC shutdown, when IAA watchdog was pending.
         */
-       if (ehci->async_iaa) {
-               u32 cmd, status;
-
-               /* If we get here, IAA is *REALLY* late.  It's barely
-                * conceivable that the system is so busy that CMD_IAAD
-                * is still legitimately set, so let's be sure it's
-                * clear before we read STS_IAA.  (The HC should clear
-                * CMD_IAAD when it sets STS_IAA.)
-                */
-               cmd = ehci_readl(ehci, &ehci->regs->command);
-
-               /*
-                * If IAA is set here it either legitimately triggered
-                * after the watchdog timer expired (_way_ late, so we'll
-                * still count it as lost) ... or a silicon erratum:
-                * - VIA seems to set IAA without triggering the IRQ;
-                * - IAAD potentially cleared without setting IAA.
-                */
-               status = ehci_readl(ehci, &ehci->regs->status);
-               if ((status & STS_IAA) || !(cmd & CMD_IAAD)) {
-                       COUNT(ehci->stats.lost_iaa);
-                       ehci_writel(ehci, STS_IAA, &ehci->regs->status);
-               }
+       if (!ehci->async_iaa || ehci->rh_state != EHCI_RH_RUNNING)
+               return;
+
+       /* If we get here, IAA is *REALLY* late.  It's barely
+        * conceivable that the system is so busy that CMD_IAAD
+        * is still legitimately set, so let's be sure it's
+        * clear before we read STS_IAA.  (The HC should clear
+        * CMD_IAAD when it sets STS_IAA.)
+        */
+       cmd = ehci_readl(ehci, &ehci->regs->command);
 
-               ehci_vdbg(ehci, "IAA watchdog: status %x cmd %x\n",
-                               status, cmd);
-               end_unlink_async(ehci);
+       /*
+        * If IAA is set here it either legitimately triggered
+        * after the watchdog timer expired (_way_ late, so we'll
+        * still count it as lost) ... or a silicon erratum:
+        * - VIA seems to set IAA without triggering the IRQ;
+        * - IAAD potentially cleared without setting IAA.
+        */
+       status = ehci_readl(ehci, &ehci->regs->status);
+       if ((status & STS_IAA) || !(cmd & CMD_IAAD)) {
+               COUNT(ehci->stats.lost_iaa);
+               ehci_writel(ehci, STS_IAA, &ehci->regs->status);
        }
+
+       ehci_dbg(ehci, "IAA watchdog: status %x cmd %x\n", status, cmd);
+       end_unlink_async(ehci);
 }