# 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.587 -> 1.588
# drivers/usb/host/uhci.c 1.35 -> 1.36
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/04/08 [EMAIL PROTECTED] 1.588
# [PATCH] uhci.c SMP deadlock
#
# This patch fixes a bug reported by Greg and David, as well as some other
# people recently.
#
# uhci.c would call wait_ms, which can sleep, with spinlocks held. There
# are two places where this happens, but only one was the cause of the
# problem.
# --------------------------------------------
#
diff -Nru a/drivers/usb/host/uhci.c b/drivers/usb/host/uhci.c
--- a/drivers/usb/host/uhci.c Mon Apr 8 15:49:27 2002
+++ b/drivers/usb/host/uhci.c Mon Apr 8 15:49:27 2002
@@ -1820,6 +1820,9 @@
} else {
urb->status = -ENOENT;
+ spin_unlock(&urb->lock);
+ spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
+
if (in_interrupt()) { /* wait at least 1 frame */
static int errorcount = 10;
@@ -1829,9 +1832,6 @@
} else
schedule_timeout(1+1*HZ/1000);
- spin_unlock(&urb->lock);
- spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
-
uhci_call_completion(urb);
}
}
@@ -2202,12 +2202,12 @@
OK(0);
case RH_PORT_RESET:
SET_RH_PORTSTAT(USBPORTSC_PR);
- wait_ms(50); /* USB v1.1 7.1.7.3 */
+ mdelay(50); /* USB v1.1 7.1.7.3 */
uhci->rh.c_p_r[wIndex - 1] = 1;
CLR_RH_PORTSTAT(USBPORTSC_PR);
udelay(10);
SET_RH_PORTSTAT(USBPORTSC_PE);
- wait_ms(10);
+ mdelay(10);
SET_RH_PORTSTAT(0xa);
OK(0);
case RH_PORT_POWER:
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
Sponsored by http://www.ThinkGeek.com/