patch-2.4.0-test2 linux/drivers/usb/usb-ohci.c

Next file: linux/drivers/usb/usb-storage.c
Previous file: linux/drivers/usb/usb-core.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test1/linux/drivers/usb/usb-ohci.c linux/drivers/usb/usb-ohci.c
@@ -527,12 +527,12 @@
 #ifdef DEBUG
 	urb_print (urb, "UNLINK", 1);
 #endif		  
-
-	usb_dec_dev_use (urb->dev);	
 	
-	if (usb_pipedevice (urb->pipe) == ohci->rh.devnum) 
+	if (usb_pipedevice (urb->pipe) == ohci->rh.devnum) {
+		usb_dec_dev_use(urb->dev);
 		return rh_unlink_urb (urb); /* a request to the virtual root hub */
-	
+	}
+
 	if (urb->hcpriv) { 
 		/* URB active? */
 		if (urb->status == USB_ST_URB_PENDING && !ohci->disabled) {
@@ -548,15 +548,19 @@
 			urb_priv->ed->state |= ED_URB_DEL;
 			spin_unlock_irqrestore (&usb_ed_lock, flags);
 			if (!(urb->transfer_flags & USB_ASYNC_UNLINK)) {
+				usb_dec_dev_use (urb->dev);	
 				add_wait_queue (&op_wakeup, &wait);
 				current->state = TASK_UNINTERRUPTIBLE;
 				if (!schedule_timeout (HZ / 10)) /* wait until all TDs are deleted */
 					err("unlink URB timeout!");
 				remove_wait_queue (&op_wakeup, &wait); 
 				urb->status = -ENOENT;
-			} else
+			} else {
+				/* usb_dec_dev_use done in dl_del_list() */
 				urb->status = -EINPROGRESS;
+			}
 		} else {
+			usb_dec_dev_use (urb->dev);	
 			urb_rm_priv (urb);
 			if (urb->complete && (urb->transfer_flags & USB_ASYNC_UNLINK)) {
 				urb->complete (urb); 
@@ -1974,7 +1978,7 @@
 		return -ENODEV;
 	
 	pci_set_master (dev);
-	mem_base = dev->resource[0].start;
+	mem_base = pci_resource_start(dev, 0);
 	mem_base = (unsigned long) ioremap_nocache (mem_base, 4096);
 
 	if (!mem_base) {

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)