On Fri, Mar 22, 2002 at 03:59:32PM -0800, Greg KH wrote:
> [EMAIL PROTECTED], 2002-03-22 15:24:12-08:00, [EMAIL PROTECTED]
> USB uhci driver update
>
> (3 updates in one, greg k-h merged them)
>
> ***
> [PATCH] uhci.c 2.4.19-pre3 kmem_cache_alloc flags
>
> My previous patch which cleaned up some of the spinlocks, moved one of
> the spinlocks around a call to kmem_cache_alloc. It would sometimes
> erroneously call it with GFP_KERNEL.
>
> This patch fixes the problem by always calling it with GFP_ATOMIC.
> Thanks to Greg for pointing this out to me.
>
> ***
> [PATCH] uhci.c 2.4.19-pre3 erroneous completion callback
>
> uhci.c would call the completion callback when the call to submit_urb
> failed. This is a rare situation.
>
> This patch only calls the completion handler if the URB successfully
> completed immediately (as in the case of talking to the virtual root
> hub).
>
> ***
> [PATCH] uhci.c 2.4.19-pre3 interrupt deadlock
>
> Unfortunately, I left out one line from my spinlock cleanup patch
> recently.
>
> As a result, using interrupt URB's could cause a deadlock on SMP
> kernels.
>
> drivers/usb/uhci.c | 7 +++++--
> 1 files changed, 5 insertions(+), 2 deletions(-)
# 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.236 -> 1.237
# drivers/usb/uhci.c 1.22 -> 1.23
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/03/22 [EMAIL PROTECTED] 1.237
# USB uhci driver update
#
# (3 updates in one, greg k-h merged them)
#
# ***
# [PATCH] uhci.c 2.4.19-pre3 kmem_cache_alloc flags
#
# My previous patch which cleaned up some of the spinlocks, moved one of
# the spinlocks around a call to kmem_cache_alloc. It would sometimes
# erroneously call it with GFP_KERNEL.
#
# This patch fixes the problem by always calling it with GFP_ATOMIC.
# Thanks to Greg for pointing this out to me.
#
# ***
# [PATCH] uhci.c 2.4.19-pre3 erroneous completion callback
#
# uhci.c would call the completion callback when the call to submit_urb
# failed. This is a rare situation.
#
# This patch only calls the completion handler if the URB successfully
# completed immediately (as in the case of talking to the virtual root
# hub).
#
# ***
# [PATCH] uhci.c 2.4.19-pre3 interrupt deadlock
#
# Unfortunately, I left out one line from my spinlock cleanup patch
# recently.
#
# As a result, using interrupt URB's could cause a deadlock on SMP
# kernels.
# --------------------------------------------
#
diff -Nru a/drivers/usb/uhci.c b/drivers/usb/uhci.c
--- a/drivers/usb/uhci.c Fri Mar 22 15:48:27 2002
+++ b/drivers/usb/uhci.c Fri Mar 22 15:48:27 2002
@@ -618,7 +618,7 @@
{
struct urb_priv *urbp;
- urbp = kmem_cache_alloc(uhci_up_cachep, in_interrupt() ? SLAB_ATOMIC :
SLAB_KERNEL);
+ urbp = kmem_cache_alloc(uhci_up_cachep, SLAB_ATOMIC);
if (!urbp) {
err("uhci_alloc_urb_priv: couldn't allocate memory for urb_priv\n");
return NULL;
@@ -1585,7 +1585,9 @@
spin_unlock(&urb->lock);
spin_unlock_irqrestore(&uhci->urb_list_lock, flags);
- uhci_call_completion(urb);
+ /* Only call completion if it was successful */
+ if (!ret)
+ uhci_call_completion(urb);
return ret;
}
@@ -1651,6 +1653,7 @@
/* Interrupts are an exception */
if (urb->interval) {
uhci_add_complete(urb);
+ spin_unlock_irqrestore(&urb->lock, flags);
return; /* <-- note return */
}
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel