summaryrefslogtreecommitdiffstats
path: root/drivers/usb/usb-ohci.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-06-19 22:45:37 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-06-19 22:45:37 +0000
commit6d403070f28cd44860fdb3a53be5da0275c65cf4 (patch)
tree0d0e7fe7b5fb7568d19e11d7d862b77a866ce081 /drivers/usb/usb-ohci.c
parentecf1bf5f6c2e668d03b0a9fb026db7aa41e292e1 (diff)
Merge with 2.4.0-test1-ac21 + pile of MIPS cleanups to make merging
possible. Chainsawed RM200 kernel to compile again. Jazz machine status unknown.
Diffstat (limited to 'drivers/usb/usb-ohci.c')
-rw-r--r--drivers/usb/usb-ohci.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/usb/usb-ohci.c b/drivers/usb/usb-ohci.c
index a37e805f0..b1d2d2a01 100644
--- a/drivers/usb/usb-ohci.c
+++ b/drivers/usb/usb-ohci.c
@@ -527,12 +527,12 @@ static int sohci_unlink_urb (urb_t * urb)
#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 @@ static int sohci_unlink_urb (urb_t * urb)
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 @@ static int hc_start_ohci (struct pci_dev * dev)
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) {