# 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 -> 1.457.4.9
#	drivers/usb/core/hcd.c	1.28    -> 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 (&hcd->rh_timer)
 			|| urb->status != -EINPROGRESS
-			|| !HCD_IS_RUNNING (hcd->state)
 			|| urb->transfer_buffer_length < len) {
 		dbg ("not queuing status urb, stat %d", urb->status);
 		return -EINVAL;
@@ -508,8 +507,12 @@
 				BUG ();
 			}
 			spin_unlock_irqrestore (&hcd_data_lock, flags);
-		} else
+		} else {
 			spin_unlock_irqrestore (&urb->lock, flags);
+			spin_lock_irqsave (&hcd_data_lock, flags);
+			rh_status_urb (hcd, urb);
+			spin_unlock_irqrestore (&hcd_data_lock, flags);
+		}
 	} else {
 		/* this urb's been unlinked */
 		urb->hcpriv = 0;