ChangeSet 1.1455.1.43, 2003/07/17 15:45:30-07:00, [EMAIL PROTECTED]
[PATCH] USB: better locking in hcd_endpoint_disable()
You'll recall there was a change to the locking in that code after
it was submitted. This is a better fix to that issue.
"Obviously correct", though I've not run with this in ages.
drivers/usb/core/hcd.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff -Nru a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
--- a/drivers/usb/core/hcd.c Thu Jul 17 17:03:12 2003
+++ b/drivers/usb/core/hcd.c Thu Jul 17 17:03:12 2003
@@ -1293,7 +1293,8 @@
}
/* then kill any current requests */
- spin_lock_irqsave (&hcd_data_lock, flags);
+ local_irq_save (flags);
+ spin_lock (&hcd_data_lock);
list_for_each_entry (urb, &dev->urb_list, urb_list) {
int tmp = urb->pipe;
@@ -1311,13 +1312,13 @@
if (urb->status != -EINPROGRESS)
continue;
usb_get_urb (urb);
- spin_unlock_irqrestore (&hcd_data_lock, flags);
+ spin_unlock (&hcd_data_lock);
- spin_lock_irqsave (&urb->lock, flags);
+ spin_lock (&urb->lock);
tmp = urb->status;
if (tmp == -EINPROGRESS)
urb->status = -ESHUTDOWN;
- spin_unlock_irqrestore (&urb->lock, flags);
+ spin_unlock (&urb->lock);
/* kick hcd unless it's already returning this */
if (tmp == -EINPROGRESS) {
@@ -1340,7 +1341,8 @@
/* list contents may have changed */
goto rescan;
}
- spin_unlock_irqrestore (&hcd_data_lock, flags);
+ spin_unlock (&hcd_data_lock);
+ local_irq_restore (flags);
/* synchronize with the hardware, so old configuration state
* clears out immediately (and will be freed).
-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel