Hello.

On 18-06-2013 19:03, Ming Lei wrote:

We disable local IRQs here in case of running complete() by
tasklet to avoid possible deadlock because drivers may call
spin_lock() to hold lock which might be acquired in one hard
interrupt handler.

The local_irq_save()/local_irq_restore() around complete()
will be removed if current USB drivers have been cleaned up
and no one may trigger the above deadlock situation when
running complete() in tasklet.

Cc: Oliver Neukum <oli...@neukum.org>
Cc: Alan Stern <st...@rowland.harvard.edu>
Signed-off-by: Ming Lei <ming....@canonical.com>
---
  drivers/usb/core/hcd.c |   23 ++++++++++++++++++++++-
  1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index a272968..09a8263 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1673,7 +1673,28 @@ static void __usb_hcd_giveback_urb(struct urb *urb)

        /* pass ownership to the completion handler */
        urb->status = status;
-       urb->complete (urb);
+
+       /*
+        * We disable local IRQs here in case of running complete() by
+        * tasklet to avoid possible deadlock because drivers may call
+        * spin_lock() to hold lock which might be acquired in one hard
+        * interrupt handler.
+        *
+        * The local_irq_save()/local_irq_restore() around complete()
+        * will be removed if current USB drivers have been cleaned up
+        * and no one may trigger the above deadlock situation when
+        * running complete() in tasklet.
+        */
+       if (hcd_giveback_urb_in_bh(hcd)) {
+               unsigned long flags;
+
+               local_irq_save(flags);
+               urb->complete (urb);

   I guess you didn't run the patch thru scripts/checkpatch.pl, did you?
It would complain about the space before (.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to