diff options
Diffstat (limited to 'drivers/usb/host/ehci.h')
| -rw-r--r-- | drivers/usb/host/ehci.h | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index b11798d17ae5..c7d4b5a06bdb 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
| @@ -183,16 +183,14 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) | |||
| 183 | * the async ring; just the I/O watchdog. Note that if a | 183 | * the async ring; just the I/O watchdog. Note that if a |
| 184 | * SHRINK were pending, OFF would never be requested. | 184 | * SHRINK were pending, OFF would never be requested. |
| 185 | */ | 185 | */ |
| 186 | enum ehci_timer_action oldactions = ehci->actions; | 186 | if (timer_pending(&ehci->watchdog) |
| 187 | && ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF)) | ||
| 188 | & ehci->actions)) | ||
| 189 | return; | ||
| 187 | 190 | ||
| 188 | if (!test_and_set_bit (action, &ehci->actions)) { | 191 | if (!test_and_set_bit (action, &ehci->actions)) { |
| 189 | unsigned long t; | 192 | unsigned long t; |
| 190 | 193 | ||
| 191 | if (timer_pending(&ehci->watchdog) | ||
| 192 | && ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF)) | ||
| 193 | & oldactions)) | ||
| 194 | return; | ||
| 195 | |||
| 196 | switch (action) { | 194 | switch (action) { |
| 197 | case TIMER_IO_WATCHDOG: | 195 | case TIMER_IO_WATCHDOG: |
| 198 | t = EHCI_IO_JIFFIES; | 196 | t = EHCI_IO_JIFFIES; |
| @@ -208,7 +206,7 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) | |||
| 208 | t = DIV_ROUND_UP(EHCI_SHRINK_FRAMES * HZ, 1000) + 1; | 206 | t = DIV_ROUND_UP(EHCI_SHRINK_FRAMES * HZ, 1000) + 1; |
| 209 | break; | 207 | break; |
| 210 | } | 208 | } |
| 211 | mod_timer(&ehci->watchdog, round_jiffies(t + jiffies)); | 209 | mod_timer(&ehci->watchdog, t + jiffies); |
| 212 | } | 210 | } |
| 213 | } | 211 | } |
| 214 | 212 | ||
