diff -urN linux/drivers/usb/usb-ohci.c bk/drivers/usb/usb-ohci.c --- linux/drivers/usb/usb-ohci.c Thu Aug 24 17:52:12 2000 +++ bk/drivers/usb/usb-ohci.c Fri Aug 18 19:14:12 2000 @@ -1530,7 +1530,7 @@ /* ignore timers firing during PM suspend, etc */ if ((ohci->hc_control & OHCI_CTRL_HCFS) != OHCI_USB_OPER) - return; + goto out; if(ohci->rh.send) { len = rh_send_irq (ohci, urb->transfer_buffer, urb->transfer_buffer_length); @@ -1541,7 +1541,8 @@ #endif if (urb->complete) urb->complete (urb); } - } + } + out: rh_init_int_timer (urb); } diff -urN linux/drivers/usb/usb.c bk/drivers/usb/usb.c --- linux/drivers/usb/usb.c Thu Aug 24 17:52:12 2000 +++ bk/drivers/usb/usb.c Fri Aug 25 08:34:58 2000 @@ -474,9 +474,6 @@ interface = dev->actconfig->interface + ifnum; - if (usb_interface_claimed(interface)) - return -1; - while (tmp != &usb_driver_list) { void *private; struct usb_driver *driver = list_entry(tmp, struct usb_driver, @@ -484,13 +481,17 @@ tmp = tmp->next; down(&driver->serialize); + if (usb_interface_claimed(interface)) { + up(&driver->serialize); + return -1; + } private = driver->probe(dev, ifnum); + if (private) { + usb_driver_claim_interface(driver, interface, private); + up(&driver->serialize); + return 0; + } up(&driver->serialize); - if (!private) - continue; - usb_driver_claim_interface(driver, interface, private); - - return 0; } return -1; diff -urN linux/include/linux/usbdevice_fs.h bk/include/linux/usbdevice_fs.h --- linux/include/linux/usbdevice_fs.h Tue Jul 11 12:08:15 2000 +++ bk/include/linux/usbdevice_fs.h Sat Jul 15 04:36:45 2000 @@ -165,13 +165,14 @@ * sigh. rwsemaphores do not (yet) work from modules */ +#if 0 #define rw_semaphore semaphore #define init_rwsem init_MUTEX #define down_read down #define down_write down #define up_read up #define up_write up - +#endif struct dev_state { struct list_head list; /* state list */