Re: Re: Hotplug events during sleep transition

Alan Stern
2005-12-29T02:02:51Z

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1686 bytes --]

On Tue, 27 Dec 2005, Patrick Mochel wrote:

> I don't think that the tree should be assumed to be frozen. I just think
> that we should try to avoid doing a full add or remove of a device (or
> really, any object) while in a suspend or resume transition.
>
> During normal system operation, how does a USB device get removed? Does it
> happen via the USB hub thread? Forgive me for asking a question that's
> probably been asked countless times, but is this thread running during a
> suspend transition?

USB device creation and removal is handled by the khubd thread. That
thread gets frozen along with everything else during suspends.

> Would it be possible to simply mark the device as 'removed' and ignore it
> until we resumed, and then clean it up (hotplug events and everything)?

Internally that's what the USB core does do. When we know that a device
has gone away during a sleep transition (generally because the USB host
controller has lost power while it was suspended), the device structure is
marked with USB_STATE_NOTATTACHED. All future I/O operations to it will
fail, future resume requests will return 0 without actually doing
anything, and future suspend requests will fail. When the khubd thread is
eventually unfrozen, it goes through the device unregistration procedure.

Note that USB device drivers do not receive any special notification when
a device goes to NOTATTACHED. Of course they can find out for themselves
by checking the state field in the device structure, but I'm not aware of
any drivers actually doing so. If asked to perform I/O (to write out a
memory image, for example), they would simply generate a bunch of I/O
errors.

Alan Stern