uhci.c in the latest stable kernel release candidates seems to have a
race condition in the suspend code triggered when all devices are
unplugged.

When the final device is unplugged, suspend_hc() is called to reduce
bus-mastering activity so that ACPI idling can give greater power
savings.  However, there is a final uhci interrupt simultaneously. 
suspend_hc() gets preempted before it finishes, and wakeup_hc() is
called within the interrupt handler uhci_interrupt().

The end result is that the host controller remains woken up, however
uhci->is_suspended is set to true.  This doesn't seem to cause serious
problems, except for a few erroneous error messages and the fact that
the host controller is not suspended (bad for power management).

I was able to fix this temporarily for myself by wrapping suspend_hc()
and wakeup_hc() with a spinlock.  However, I suspect the patch that Alan
Stern recently applied to the 2.5 series to fix issues with the
controller state probably solves the problem (it removes the wakeup_hc()
call from uhci_interrupt()).  Is there any chance this patch will be
applied to the 2.4 uhci driver as well?

Regards,

David Moore


-- 
------------------------------------------------------
David Moore <[EMAIL PROTECTED]>         http://davemoore.org
        California Institute of Technology
------------------------------------------------------




-------------------------------------------------------
This SF.net email is sponsored by: eBay
Get office equipment for less on eBay!
http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to