The xhci interrupt handler just needs to make sure that the disconnect isn't propagated if roothub is suspended and wake on disconnect is not set. And definitely make sure xhci doesn't start roothub polling. When freeze() is called for the host we should prevent the host from generating interrupts. > > (If the root hub _is_ enabled for wakeup then it's questionable. > Unplugging a device would be a wakeup event, so you could easily argue > that it _should_ prevent the system from going into hibernation. After > all, if the unplug happened a few milliseconds later, after the system > had fully gone into hibernation, then it would cause the system to wake > up.) > >> Would it make sense prevent xHCI interrupt generation in the host >> freeze() stage, clearing the xHCI EINT bit in addition to calling >> check_roothub_suspend()? >> Then enable it back in thaw() > > That won't fully eliminate the problem mentioned in the preceding > paragraphs, although I guess it would help somewhat. Would the following steps solve this? 1. Disable device initiated resume for connected usb devices in freeze() 2. Don't propagate connect or OC changes if roothub is suspended and port wake flags are disabled. I.E don't kick roothub polling in xhci interrupt handler here. 3 Disable host interrupt generation in host freeze(), and re-enable in thaw() -Mathias