On Wed, 5 Dec 2007, Pete Zaitcev wrote: > On Wed, 5 Dec 2007 10:15:44 -0500 (EST), Alan Stern <[EMAIL PROTECTED]> wrote: > > > http://bugzilla.kernel.org/show_bug.cgi?id=9335 > > > > The problem appears to be that ohci-hcd (and also ehci-hcd) calls > > spin_lock() in its IRQ handler instead of spin_lock_irqsave(). A > > deadlock occurs because interrupts are not disabled while the handler > > runs. > > How does the deadlock occur? Although interrupts are not disabled in > the CPU, the platform must ensure that the IRQ is not re-entered. > A deadlock would only occur if, for example, OCHI used mod_timer.
In this case the deadlock occurred because a UHCI interrupt occurred while an OHCI interrupt was being serviced. Two different IRQs, one interrupting the other. Both handlers tried to acquire a usbcore spinlock. > The backtrace looks more like a case of usb_hcd_unlink_urb_from_ep > not using proper irqsave than ohci-hcd. I suppose you could think of it that way. However usb_hcd_unlink_urb_from_ep is documented as requiring that it be called with interrupts disabled. So the fault is really the caller's -- i.e., ohci-hcd's failure to disable interrupts while its interrupt handler runs. Alan Stern - To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html