--- usb-uhci.c.orig	Mon Nov 10 23:37:44 2003
+++ usb-uhci.c	Mon Nov 10 16:28:50 2003
@@ -795,7 +795,7 @@
 
 	list_add (&qh->desc_list, &urb_priv->desc_list);
 
-	queue_urb (s, urb);	// queue before inserting in desc chain
+	queue_urb_unlocked (s, urb);	// queue before inserting in desc chain
 
 	qh->hw.qh.element &= cpu_to_le32(~UHCI_PTR_TERM);
 
@@ -1351,7 +1351,7 @@
 	int ret=-1;
 	unsigned long flags;
 	
-	spin_lock_irqsave (&s->urb_list_lock, flags);
+	/* spin_lock_irqsave (&s->urb_list_lock, flags);*/
 	p=s->urb_list.prev;
 
 	for (; p != &s->urb_list; p = p->prev) {
@@ -1370,7 +1370,7 @@
 		ret=0;
 	}
 	
-	spin_unlock_irqrestore(&s->urb_list_lock, flags);
+	/* spin_unlock_irqrestore(&s->urb_list_lock, flags);*/
 	
 	return ret;
 }
@@ -1486,7 +1486,7 @@
 	fill_td (td, status, info, urb_priv->transfer_buffer_dma);
 	list_add_tail (&td->desc_list, &urb_priv->desc_list);
 
-	queue_urb (s, urb);
+	queue_urb_unlocked (s, urb);
 
 	insert_td_horizontal (s, s->int_chain[nint], td);	// store in INT-TDs
 
@@ -1567,7 +1567,7 @@
 			
 		if (n  == last) {
 			status |= TD_CTRL_IOC;
-			queue_urb (s, urb);
+			queue_urb_unlocked (s, urb);
 		}
 
 		fill_td (td, status, destination | (((urb->iso_frame_desc[n].length - 1) & 0x7ff) << 21),
@@ -1709,7 +1709,6 @@
 		spin_unlock_irqrestore (&s->urb_list_lock, flags);
 	}
 	else {
-		spin_unlock_irqrestore (&s->urb_list_lock, flags);
 		switch (type) {
 		case PIPE_ISOCHRONOUS:			
 			if (urb->bandwidth == 0) {      /* not yet checked/allocated */
@@ -1750,6 +1749,7 @@
 		default:
 			ret = -EINVAL;
 		}
+		spin_unlock_irqrestore (&s->urb_list_lock, flags);
 	}
 
 	dbg("submit_urb: scheduled with ret: %d", ret);
