[USBPORT] Fix endless loop, occasionally happened on real hardware
authorVictor Perevertkin <victor@perevertkin.ru>
Thu, 1 Aug 2019 18:17:44 +0000 (21:17 +0300)
committerVictor Perevertkin <victor@perevertkin.ru>
Mon, 19 Aug 2019 22:30:52 +0000 (01:30 +0300)
drivers/usb/usbport/queue.c

index 9635de1..df70e5f 100644 (file)
@@ -1261,7 +1261,7 @@ USBPORT_FlushController(IN PDEVICE_OBJECT FdoDevice)
     PUSBPORT_DEVICE_EXTENSION  FdoExtension;
     PLIST_ENTRY Entry;
     PUSBPORT_ENDPOINT Endpoint;
     PUSBPORT_DEVICE_EXTENSION  FdoExtension;
     PLIST_ENTRY Entry;
     PUSBPORT_ENDPOINT Endpoint;
-    ULONG KilledTransfers = 0;
+    ULONG KilledTransfers;
     PLIST_ENTRY EndpointList;
     KIRQL OldIrql;
     LIST_ENTRY FlushList;
     PLIST_ENTRY EndpointList;
     KIRQL OldIrql;
     LIST_ENTRY FlushList;
@@ -1301,6 +1301,7 @@ USBPORT_FlushController(IN PDEVICE_OBJECT FdoDevice)
 
         KeReleaseSpinLock(&FdoExtension->EndpointListSpinLock, OldIrql);
 
 
         KeReleaseSpinLock(&FdoExtension->EndpointListSpinLock, OldIrql);
 
+        KilledTransfers = 0;
         while (!IsListEmpty(&FlushList))
         {
             Endpoint = CONTAINING_RECORD(FlushList.Flink,
         while (!IsListEmpty(&FlushList))
         {
             Endpoint = CONTAINING_RECORD(FlushList.Flink,
@@ -1355,7 +1356,7 @@ USBPORT_AbortEndpoint(IN PDEVICE_OBJECT FdoDevice,
                       IN PIRP Irp)
 {
     PLIST_ENTRY PendingList;
                       IN PIRP Irp)
 {
     PLIST_ENTRY PendingList;
-    PUSBPORT_TRANSFER PendingTransfer; 
+    PUSBPORT_TRANSFER PendingTransfer;
     PLIST_ENTRY ActiveList;
     PUSBPORT_TRANSFER ActiveTransfer;
 
     PLIST_ENTRY ActiveList;
     PUSBPORT_TRANSFER ActiveTransfer;