# 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.7.8 -> 1.457.7.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.7.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 Mon Aug 12 10:57:37 2002 +++ b/drivers/usb/core/hcd.c Mon Aug 12 10:57:37 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;