Re: [linux-pm] [RFC][PATCH 1/4] PM: Use a different list of devices for each stage of device suspend

Alan Stern
2010-12-13T03:46:26Z

On Sun, 12 Dec 2010, Alan Stern wrote:

> On Mon, 13 Dec 2010, Rafael J. Wysocki wrote:
>
> > From: Rafael J. Wysocki <rjw@sisk.pl>
> >
> > Instead of keeping all devices in the same list during system suspend
> > and resume, regardless of what suspend-resume callbacks have been
> > executed for them already, use separate lists of devices that have
> > had their ->prepare(), ->suspend() and ->suspend_noirq() callbacks
> > executed. This will allow us to simplify the core device suspend and
> > resume routines.
>
> Okay in principle. But there's one mistake...
>
> > @@ -699,8 +693,8 @@ static void dpm_complete(pm_message_t st
> > INIT_LIST_HEAD(&list);
> > mutex_lock(&dpm_list_mtx);
> > transition_started = false;
> > - while (!list_empty(&dpm_list)) {
> > - struct device *dev = to_device(dpm_list.prev);
> > + while (!list_empty(&dpm_prepared_list)) {
> > + struct device *dev = to_device(dpm_prepared_list.prev);
> >
> > get_device(dev);
> > if (dev->power.status > DPM_ON) {
>
> The parts about getting rid of "list" and putting dev back onto
> dpm_list got left out.

Never mind. I forgot that we need to keep using the intermediate list
in order to handle new devices being registered while the resumes are
taking place.

Alan Stern