aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci.h
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2012-07-11 11:22:57 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-16 19:56:47 -0400
commit361aabf395e4a23cf554cf4ec0c0c6963b8beb01 (patch)
tree607f8e039f47905713b7634a663dccd6998d8135 /drivers/usb/host/ehci.h
parent32830f207691176234b4c4dd17f0d7ab6d87d94b (diff)
USB: EHCI: don't lose events during a scan
This patch (as1584) fixes a minor bug that has been present in ehci-hcd since the beginning. Scanning the schedules for URB completions is single-threaded. If a completion interrupt occurs while an URB is being given back, the interrupt handler realizes that a scan is in progress on another CPU and avoids starting a new one. This means that completion events can be lost. If an URB completes after it has been scanned but while a scan is still in progress, the driver won't notice and won't rescan the completed URB. The patch fixes the problem by adding a new flag to indicate that another scan is needed after the current scan is done. The flag gets set whenever a completion interrupt occurs while a scan is in progress. The rescan will see the completion, thus preventing it from getting lost. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ehci.h')
-rw-r--r--drivers/usb/host/ehci.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index 303c36cc99c9..c462d52ac575 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -113,7 +113,8 @@ struct ehci_hcd { /* one per controller */
113 enum ehci_rh_state rh_state; 113 enum ehci_rh_state rh_state;
114 114
115 /* general schedule support */ 115 /* general schedule support */
116 unsigned scanning:1; 116 bool scanning:1;
117 bool need_rescan:1;
117 bool intr_unlinking:1; 118 bool intr_unlinking:1;
118 bool async_unlinking:1; 119 bool async_unlinking:1;
119 120