<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.457.4.8 -&gt; 1.457.4.9
#	drivers/usb/core/hcd.c	1.28    -&gt; 1.29   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/08/06	paulus@samba.org	1.457.4.9
# [PATCH] USB root hub polling and suspend
# 
# Currently with 2.5, when I suspend and resume my powerbook, I find
# that the USB subsystem no longer sees root hub events, i.e. it doesn't
# notice when I plug in a new USB device (it doesn't notice when I
# unplug a device either but of course the driver for the device sees
# that it is no longer responding).
# 
# It turns out that what happens is that the root hub timer goes off
# after the OHCI driver has done its suspend stuff.  The timer routine
# sees that the HCD is not running at the moment and doesn't schedule
# another timeout.  Hence the series of timeouts stops.
# --------------------------------------------
#
diff -Nru a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
--- a/drivers/usb/core/hcd.c	Tue Aug  6 22:06:33 2002
+++ b/drivers/usb/core/hcd.c	Tue Aug  6 22:06:33 2002
@@ -454,7 +454,6 @@
 	/* rh_timer protected by hcd_data_lock */
 	if (timer_pending (&amp;hcd-&gt;rh_timer)
 			|| urb-&gt;status != -EINPROGRESS
-			|| !HCD_IS_RUNNING (hcd-&gt;state)
 			|| urb-&gt;transfer_buffer_length &lt; len) {
 		dbg ("not queuing status urb, stat %d", urb-&gt;status);
 		return -EINVAL;
@@ -508,8 +507,12 @@
 				BUG ();
 			}
 			spin_unlock_irqrestore (&amp;hcd_data_lock, flags);
-		} else
+		} else {
 			spin_unlock_irqrestore (&amp;urb-&gt;lock, flags);
+			spin_lock_irqsave (&amp;hcd_data_lock, flags);
+			rh_status_urb (hcd, urb);
+			spin_unlock_irqrestore (&amp;hcd_data_lock, flags);
+		}
 	} else {
 		/* this urb's been unlinked */
 		urb-&gt;hcpriv = 0;
</pre></body></html>