PM: Remove bus_type suspend_late()/resume_early() V2
[safe/jmp/linux-2.6] / drivers / base / power / main.c
1 /*
2  * drivers/base/power/main.c - Where the driver meets power management.
3  *
4  * Copyright (c) 2003 Patrick Mochel
5  * Copyright (c) 2003 Open Source Development Lab
6  *
7  * This file is released under the GPLv2
8  *
9  *
10  * The driver model core calls device_pm_add() when a device is registered.
11  * This will intialize the embedded device_pm_info object in the device
12  * and add it to the list of power-controlled devices. sysfs entries for
13  * controlling device power management will also be added.
14  *
15  * A separate list is used for keeping track of power info, because the power
16  * domain dependencies may differ from the ancestral dependencies that the
17  * subsystem list maintains.
18  */
19
20 #include <linux/device.h>
21 #include <linux/kallsyms.h>
22 #include <linux/mutex.h>
23 #include <linux/pm.h>
24 #include <linux/resume-trace.h>
25 #include <linux/rwsem.h>
26 #include <linux/interrupt.h>
27
28 #include "../base.h"
29 #include "power.h"
30
31 /*
32  * The entries in the dpm_list list are in a depth first order, simply
33  * because children are guaranteed to be discovered after parents, and
34  * are inserted at the back of the list on discovery.
35  *
36  * Since device_pm_add() may be called with a device semaphore held,
37  * we must never try to acquire a device semaphore while holding
38  * dpm_list_mutex.
39  */
40
41 LIST_HEAD(dpm_list);
42
43 static DEFINE_MUTEX(dpm_list_mtx);
44
45 /*
46  * Set once the preparation of devices for a PM transition has started, reset
47  * before starting to resume devices.  Protected by dpm_list_mtx.
48  */
49 static bool transition_started;
50
51 /**
52  *      device_pm_lock - lock the list of active devices used by the PM core
53  */
54 void device_pm_lock(void)
55 {
56         mutex_lock(&dpm_list_mtx);
57 }
58
59 /**
60  *      device_pm_unlock - unlock the list of active devices used by the PM core
61  */
62 void device_pm_unlock(void)
63 {
64         mutex_unlock(&dpm_list_mtx);
65 }
66
67 /**
68  *      device_pm_add - add a device to the list of active devices
69  *      @dev:   Device to be added to the list
70  */
71 void device_pm_add(struct device *dev)
72 {
73         pr_debug("PM: Adding info for %s:%s\n",
74                  dev->bus ? dev->bus->name : "No Bus",
75                  kobject_name(&dev->kobj));
76         mutex_lock(&dpm_list_mtx);
77         if (dev->parent) {
78                 if (dev->parent->power.status >= DPM_SUSPENDING)
79                         dev_warn(dev, "parent %s should not be sleeping\n",
80                                  dev_name(dev->parent));
81         } else if (transition_started) {
82                 /*
83                  * We refuse to register parentless devices while a PM
84                  * transition is in progress in order to avoid leaving them
85                  * unhandled down the road
86                  */
87                 dev_WARN(dev, "Parentless device registered during a PM transaction\n");
88         }
89
90         list_add_tail(&dev->power.entry, &dpm_list);
91         mutex_unlock(&dpm_list_mtx);
92 }
93
94 /**
95  *      device_pm_remove - remove a device from the list of active devices
96  *      @dev:   Device to be removed from the list
97  *
98  *      This function also removes the device's PM-related sysfs attributes.
99  */
100 void device_pm_remove(struct device *dev)
101 {
102         pr_debug("PM: Removing info for %s:%s\n",
103                  dev->bus ? dev->bus->name : "No Bus",
104                  kobject_name(&dev->kobj));
105         mutex_lock(&dpm_list_mtx);
106         list_del_init(&dev->power.entry);
107         mutex_unlock(&dpm_list_mtx);
108 }
109
110 /**
111  *      device_pm_move_before - move device in dpm_list
112  *      @deva:  Device to move in dpm_list
113  *      @devb:  Device @deva should come before
114  */
115 void device_pm_move_before(struct device *deva, struct device *devb)
116 {
117         pr_debug("PM: Moving %s:%s before %s:%s\n",
118                  deva->bus ? deva->bus->name : "No Bus",
119                  kobject_name(&deva->kobj),
120                  devb->bus ? devb->bus->name : "No Bus",
121                  kobject_name(&devb->kobj));
122         /* Delete deva from dpm_list and reinsert before devb. */
123         list_move_tail(&deva->power.entry, &devb->power.entry);
124 }
125
126 /**
127  *      device_pm_move_after - move device in dpm_list
128  *      @deva:  Device to move in dpm_list
129  *      @devb:  Device @deva should come after
130  */
131 void device_pm_move_after(struct device *deva, struct device *devb)
132 {
133         pr_debug("PM: Moving %s:%s after %s:%s\n",
134                  deva->bus ? deva->bus->name : "No Bus",
135                  kobject_name(&deva->kobj),
136                  devb->bus ? devb->bus->name : "No Bus",
137                  kobject_name(&devb->kobj));
138         /* Delete deva from dpm_list and reinsert after devb. */
139         list_move(&deva->power.entry, &devb->power.entry);
140 }
141
142 /**
143  *      device_pm_move_last - move device to end of dpm_list
144  *      @dev:   Device to move in dpm_list
145  */
146 void device_pm_move_last(struct device *dev)
147 {
148         pr_debug("PM: Moving %s:%s to end of list\n",
149                  dev->bus ? dev->bus->name : "No Bus",
150                  kobject_name(&dev->kobj));
151         list_move_tail(&dev->power.entry, &dpm_list);
152 }
153
154 /**
155  *      pm_op - execute the PM operation appropiate for given PM event
156  *      @dev:   Device.
157  *      @ops:   PM operations to choose from.
158  *      @state: PM transition of the system being carried out.
159  */
160 static int pm_op(struct device *dev, struct dev_pm_ops *ops,
161                         pm_message_t state)
162 {
163         int error = 0;
164
165         switch (state.event) {
166 #ifdef CONFIG_SUSPEND
167         case PM_EVENT_SUSPEND:
168                 if (ops->suspend) {
169                         error = ops->suspend(dev);
170                         suspend_report_result(ops->suspend, error);
171                 }
172                 break;
173         case PM_EVENT_RESUME:
174                 if (ops->resume) {
175                         error = ops->resume(dev);
176                         suspend_report_result(ops->resume, error);
177                 }
178                 break;
179 #endif /* CONFIG_SUSPEND */
180 #ifdef CONFIG_HIBERNATION
181         case PM_EVENT_FREEZE:
182         case PM_EVENT_QUIESCE:
183                 if (ops->freeze) {
184                         error = ops->freeze(dev);
185                         suspend_report_result(ops->freeze, error);
186                 }
187                 break;
188         case PM_EVENT_HIBERNATE:
189                 if (ops->poweroff) {
190                         error = ops->poweroff(dev);
191                         suspend_report_result(ops->poweroff, error);
192                 }
193                 break;
194         case PM_EVENT_THAW:
195         case PM_EVENT_RECOVER:
196                 if (ops->thaw) {
197                         error = ops->thaw(dev);
198                         suspend_report_result(ops->thaw, error);
199                 }
200                 break;
201         case PM_EVENT_RESTORE:
202                 if (ops->restore) {
203                         error = ops->restore(dev);
204                         suspend_report_result(ops->restore, error);
205                 }
206                 break;
207 #endif /* CONFIG_HIBERNATION */
208         default:
209                 error = -EINVAL;
210         }
211         return error;
212 }
213
214 /**
215  *      pm_noirq_op - execute the PM operation appropiate for given PM event
216  *      @dev:   Device.
217  *      @ops:   PM operations to choose from.
218  *      @state: PM transition of the system being carried out.
219  *
220  *      The operation is executed with interrupts disabled by the only remaining
221  *      functional CPU in the system.
222  */
223 static int pm_noirq_op(struct device *dev, struct dev_pm_ops *ops,
224                         pm_message_t state)
225 {
226         int error = 0;
227
228         switch (state.event) {
229 #ifdef CONFIG_SUSPEND
230         case PM_EVENT_SUSPEND:
231                 if (ops->suspend_noirq) {
232                         error = ops->suspend_noirq(dev);
233                         suspend_report_result(ops->suspend_noirq, error);
234                 }
235                 break;
236         case PM_EVENT_RESUME:
237                 if (ops->resume_noirq) {
238                         error = ops->resume_noirq(dev);
239                         suspend_report_result(ops->resume_noirq, error);
240                 }
241                 break;
242 #endif /* CONFIG_SUSPEND */
243 #ifdef CONFIG_HIBERNATION
244         case PM_EVENT_FREEZE:
245         case PM_EVENT_QUIESCE:
246                 if (ops->freeze_noirq) {
247                         error = ops->freeze_noirq(dev);
248                         suspend_report_result(ops->freeze_noirq, error);
249                 }
250                 break;
251         case PM_EVENT_HIBERNATE:
252                 if (ops->poweroff_noirq) {
253                         error = ops->poweroff_noirq(dev);
254                         suspend_report_result(ops->poweroff_noirq, error);
255                 }
256                 break;
257         case PM_EVENT_THAW:
258         case PM_EVENT_RECOVER:
259                 if (ops->thaw_noirq) {
260                         error = ops->thaw_noirq(dev);
261                         suspend_report_result(ops->thaw_noirq, error);
262                 }
263                 break;
264         case PM_EVENT_RESTORE:
265                 if (ops->restore_noirq) {
266                         error = ops->restore_noirq(dev);
267                         suspend_report_result(ops->restore_noirq, error);
268                 }
269                 break;
270 #endif /* CONFIG_HIBERNATION */
271         default:
272                 error = -EINVAL;
273         }
274         return error;
275 }
276
277 static char *pm_verb(int event)
278 {
279         switch (event) {
280         case PM_EVENT_SUSPEND:
281                 return "suspend";
282         case PM_EVENT_RESUME:
283                 return "resume";
284         case PM_EVENT_FREEZE:
285                 return "freeze";
286         case PM_EVENT_QUIESCE:
287                 return "quiesce";
288         case PM_EVENT_HIBERNATE:
289                 return "hibernate";
290         case PM_EVENT_THAW:
291                 return "thaw";
292         case PM_EVENT_RESTORE:
293                 return "restore";
294         case PM_EVENT_RECOVER:
295                 return "recover";
296         default:
297                 return "(unknown PM event)";
298         }
299 }
300
301 static void pm_dev_dbg(struct device *dev, pm_message_t state, char *info)
302 {
303         dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event),
304                 ((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
305                 ", may wakeup" : "");
306 }
307
308 static void pm_dev_err(struct device *dev, pm_message_t state, char *info,
309                         int error)
310 {
311         printk(KERN_ERR "PM: Device %s failed to %s%s: error %d\n",
312                 kobject_name(&dev->kobj), pm_verb(state.event), info, error);
313 }
314
315 /*------------------------- Resume routines -------------------------*/
316
317 /**
318  *      device_resume_noirq - Power on one device (early resume).
319  *      @dev:   Device.
320  *      @state: PM transition of the system being carried out.
321  *
322  *      Must be called with interrupts disabled.
323  */
324 static int device_resume_noirq(struct device *dev, pm_message_t state)
325 {
326         int error = 0;
327
328         TRACE_DEVICE(dev);
329         TRACE_RESUME(0);
330
331         if (!dev->bus)
332                 goto End;
333
334         if (dev->bus->pm) {
335                 pm_dev_dbg(dev, state, "EARLY ");
336                 error = pm_noirq_op(dev, dev->bus->pm, state);
337         }
338  End:
339         TRACE_RESUME(error);
340         return error;
341 }
342
343 /**
344  *      dpm_resume_noirq - Power on all regular (non-sysdev) devices.
345  *      @state: PM transition of the system being carried out.
346  *
347  *      Call the "noirq" resume handlers for all devices marked as
348  *      DPM_OFF_IRQ and enable device drivers to receive interrupts.
349  *
350  *      Must be called under dpm_list_mtx.  Device drivers should not receive
351  *      interrupts while it's being executed.
352  */
353 void dpm_resume_noirq(pm_message_t state)
354 {
355         struct device *dev;
356
357         mutex_lock(&dpm_list_mtx);
358         list_for_each_entry(dev, &dpm_list, power.entry)
359                 if (dev->power.status > DPM_OFF) {
360                         int error;
361
362                         dev->power.status = DPM_OFF;
363                         error = device_resume_noirq(dev, state);
364                         if (error)
365                                 pm_dev_err(dev, state, " early", error);
366                 }
367         mutex_unlock(&dpm_list_mtx);
368         resume_device_irqs();
369 }
370 EXPORT_SYMBOL_GPL(dpm_resume_noirq);
371
372 /**
373  *      device_resume - Restore state for one device.
374  *      @dev:   Device.
375  *      @state: PM transition of the system being carried out.
376  */
377 static int device_resume(struct device *dev, pm_message_t state)
378 {
379         int error = 0;
380
381         TRACE_DEVICE(dev);
382         TRACE_RESUME(0);
383
384         down(&dev->sem);
385
386         if (dev->bus) {
387                 if (dev->bus->pm) {
388                         pm_dev_dbg(dev, state, "");
389                         error = pm_op(dev, dev->bus->pm, state);
390                 } else if (dev->bus->resume) {
391                         pm_dev_dbg(dev, state, "legacy ");
392                         error = dev->bus->resume(dev);
393                 }
394                 if (error)
395                         goto End;
396         }
397
398         if (dev->type) {
399                 if (dev->type->pm) {
400                         pm_dev_dbg(dev, state, "type ");
401                         error = pm_op(dev, dev->type->pm, state);
402                 } else if (dev->type->resume) {
403                         pm_dev_dbg(dev, state, "legacy type ");
404                         error = dev->type->resume(dev);
405                 }
406                 if (error)
407                         goto End;
408         }
409
410         if (dev->class) {
411                 if (dev->class->pm) {
412                         pm_dev_dbg(dev, state, "class ");
413                         error = pm_op(dev, dev->class->pm, state);
414                 } else if (dev->class->resume) {
415                         pm_dev_dbg(dev, state, "legacy class ");
416                         error = dev->class->resume(dev);
417                 }
418         }
419  End:
420         up(&dev->sem);
421
422         TRACE_RESUME(error);
423         return error;
424 }
425
426 /**
427  *      dpm_resume - Resume every device.
428  *      @state: PM transition of the system being carried out.
429  *
430  *      Execute the appropriate "resume" callback for all devices the status of
431  *      which indicates that they are inactive.
432  */
433 static void dpm_resume(pm_message_t state)
434 {
435         struct list_head list;
436
437         INIT_LIST_HEAD(&list);
438         mutex_lock(&dpm_list_mtx);
439         transition_started = false;
440         while (!list_empty(&dpm_list)) {
441                 struct device *dev = to_device(dpm_list.next);
442
443                 get_device(dev);
444                 if (dev->power.status >= DPM_OFF) {
445                         int error;
446
447                         dev->power.status = DPM_RESUMING;
448                         mutex_unlock(&dpm_list_mtx);
449
450                         error = device_resume(dev, state);
451
452                         mutex_lock(&dpm_list_mtx);
453                         if (error)
454                                 pm_dev_err(dev, state, "", error);
455                 } else if (dev->power.status == DPM_SUSPENDING) {
456                         /* Allow new children of the device to be registered */
457                         dev->power.status = DPM_RESUMING;
458                 }
459                 if (!list_empty(&dev->power.entry))
460                         list_move_tail(&dev->power.entry, &list);
461                 put_device(dev);
462         }
463         list_splice(&list, &dpm_list);
464         mutex_unlock(&dpm_list_mtx);
465 }
466
467 /**
468  *      device_complete - Complete a PM transition for given device
469  *      @dev:   Device.
470  *      @state: PM transition of the system being carried out.
471  */
472 static void device_complete(struct device *dev, pm_message_t state)
473 {
474         down(&dev->sem);
475
476         if (dev->class && dev->class->pm && dev->class->pm->complete) {
477                 pm_dev_dbg(dev, state, "completing class ");
478                 dev->class->pm->complete(dev);
479         }
480
481         if (dev->type && dev->type->pm && dev->type->pm->complete) {
482                 pm_dev_dbg(dev, state, "completing type ");
483                 dev->type->pm->complete(dev);
484         }
485
486         if (dev->bus && dev->bus->pm && dev->bus->pm->complete) {
487                 pm_dev_dbg(dev, state, "completing ");
488                 dev->bus->pm->complete(dev);
489         }
490
491         up(&dev->sem);
492 }
493
494 /**
495  *      dpm_complete - Complete a PM transition for all devices.
496  *      @state: PM transition of the system being carried out.
497  *
498  *      Execute the ->complete() callbacks for all devices that are not marked
499  *      as DPM_ON.
500  */
501 static void dpm_complete(pm_message_t state)
502 {
503         struct list_head list;
504
505         INIT_LIST_HEAD(&list);
506         mutex_lock(&dpm_list_mtx);
507         while (!list_empty(&dpm_list)) {
508                 struct device *dev = to_device(dpm_list.prev);
509
510                 get_device(dev);
511                 if (dev->power.status > DPM_ON) {
512                         dev->power.status = DPM_ON;
513                         mutex_unlock(&dpm_list_mtx);
514
515                         device_complete(dev, state);
516
517                         mutex_lock(&dpm_list_mtx);
518                 }
519                 if (!list_empty(&dev->power.entry))
520                         list_move(&dev->power.entry, &list);
521                 put_device(dev);
522         }
523         list_splice(&list, &dpm_list);
524         mutex_unlock(&dpm_list_mtx);
525 }
526
527 /**
528  *      dpm_resume_end - Restore state of each device in system.
529  *      @state: PM transition of the system being carried out.
530  *
531  *      Resume all the devices, unlock them all, and allow new
532  *      devices to be registered once again.
533  */
534 void dpm_resume_end(pm_message_t state)
535 {
536         might_sleep();
537         dpm_resume(state);
538         dpm_complete(state);
539 }
540 EXPORT_SYMBOL_GPL(dpm_resume_end);
541
542
543 /*------------------------- Suspend routines -------------------------*/
544
545 /**
546  *      resume_event - return a PM message representing the resume event
547  *                     corresponding to given sleep state.
548  *      @sleep_state: PM message representing a sleep state.
549  */
550 static pm_message_t resume_event(pm_message_t sleep_state)
551 {
552         switch (sleep_state.event) {
553         case PM_EVENT_SUSPEND:
554                 return PMSG_RESUME;
555         case PM_EVENT_FREEZE:
556         case PM_EVENT_QUIESCE:
557                 return PMSG_RECOVER;
558         case PM_EVENT_HIBERNATE:
559                 return PMSG_RESTORE;
560         }
561         return PMSG_ON;
562 }
563
564 /**
565  *      device_suspend_noirq - Shut down one device (late suspend).
566  *      @dev:   Device.
567  *      @state: PM transition of the system being carried out.
568  *
569  *      This is called with interrupts off and only a single CPU running.
570  */
571 static int device_suspend_noirq(struct device *dev, pm_message_t state)
572 {
573         int error = 0;
574
575         if (!dev->bus)
576                 return 0;
577
578         if (dev->bus->pm) {
579                 pm_dev_dbg(dev, state, "LATE ");
580                 error = pm_noirq_op(dev, dev->bus->pm, state);
581         }
582         return error;
583 }
584
585 /**
586  *      dpm_suspend_noirq - Power down all regular (non-sysdev) devices.
587  *      @state: PM transition of the system being carried out.
588  *
589  *      Prevent device drivers from receiving interrupts and call the "noirq"
590  *      suspend handlers.
591  *
592  *      Must be called under dpm_list_mtx.
593  */
594 int dpm_suspend_noirq(pm_message_t state)
595 {
596         struct device *dev;
597         int error = 0;
598
599         suspend_device_irqs();
600         mutex_lock(&dpm_list_mtx);
601         list_for_each_entry_reverse(dev, &dpm_list, power.entry) {
602                 error = device_suspend_noirq(dev, state);
603                 if (error) {
604                         pm_dev_err(dev, state, " late", error);
605                         break;
606                 }
607                 dev->power.status = DPM_OFF_IRQ;
608         }
609         mutex_unlock(&dpm_list_mtx);
610         if (error)
611                 dpm_resume_noirq(resume_event(state));
612         return error;
613 }
614 EXPORT_SYMBOL_GPL(dpm_suspend_noirq);
615
616 /**
617  *      device_suspend - Save state of one device.
618  *      @dev:   Device.
619  *      @state: PM transition of the system being carried out.
620  */
621 static int device_suspend(struct device *dev, pm_message_t state)
622 {
623         int error = 0;
624
625         down(&dev->sem);
626
627         if (dev->class) {
628                 if (dev->class->pm) {
629                         pm_dev_dbg(dev, state, "class ");
630                         error = pm_op(dev, dev->class->pm, state);
631                 } else if (dev->class->suspend) {
632                         pm_dev_dbg(dev, state, "legacy class ");
633                         error = dev->class->suspend(dev, state);
634                         suspend_report_result(dev->class->suspend, error);
635                 }
636                 if (error)
637                         goto End;
638         }
639
640         if (dev->type) {
641                 if (dev->type->pm) {
642                         pm_dev_dbg(dev, state, "type ");
643                         error = pm_op(dev, dev->type->pm, state);
644                 } else if (dev->type->suspend) {
645                         pm_dev_dbg(dev, state, "legacy type ");
646                         error = dev->type->suspend(dev, state);
647                         suspend_report_result(dev->type->suspend, error);
648                 }
649                 if (error)
650                         goto End;
651         }
652
653         if (dev->bus) {
654                 if (dev->bus->pm) {
655                         pm_dev_dbg(dev, state, "");
656                         error = pm_op(dev, dev->bus->pm, state);
657                 } else if (dev->bus->suspend) {
658                         pm_dev_dbg(dev, state, "legacy ");
659                         error = dev->bus->suspend(dev, state);
660                         suspend_report_result(dev->bus->suspend, error);
661                 }
662         }
663  End:
664         up(&dev->sem);
665
666         return error;
667 }
668
669 /**
670  *      dpm_suspend - Suspend every device.
671  *      @state: PM transition of the system being carried out.
672  *
673  *      Execute the appropriate "suspend" callbacks for all devices.
674  */
675 static int dpm_suspend(pm_message_t state)
676 {
677         struct list_head list;
678         int error = 0;
679
680         INIT_LIST_HEAD(&list);
681         mutex_lock(&dpm_list_mtx);
682         while (!list_empty(&dpm_list)) {
683                 struct device *dev = to_device(dpm_list.prev);
684
685                 get_device(dev);
686                 mutex_unlock(&dpm_list_mtx);
687
688                 error = device_suspend(dev, state);
689
690                 mutex_lock(&dpm_list_mtx);
691                 if (error) {
692                         pm_dev_err(dev, state, "", error);
693                         put_device(dev);
694                         break;
695                 }
696                 dev->power.status = DPM_OFF;
697                 if (!list_empty(&dev->power.entry))
698                         list_move(&dev->power.entry, &list);
699                 put_device(dev);
700         }
701         list_splice(&list, dpm_list.prev);
702         mutex_unlock(&dpm_list_mtx);
703         return error;
704 }
705
706 /**
707  *      device_prepare - Execute the ->prepare() callback(s) for given device.
708  *      @dev:   Device.
709  *      @state: PM transition of the system being carried out.
710  */
711 static int device_prepare(struct device *dev, pm_message_t state)
712 {
713         int error = 0;
714
715         down(&dev->sem);
716
717         if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) {
718                 pm_dev_dbg(dev, state, "preparing ");
719                 error = dev->bus->pm->prepare(dev);
720                 suspend_report_result(dev->bus->pm->prepare, error);
721                 if (error)
722                         goto End;
723         }
724
725         if (dev->type && dev->type->pm && dev->type->pm->prepare) {
726                 pm_dev_dbg(dev, state, "preparing type ");
727                 error = dev->type->pm->prepare(dev);
728                 suspend_report_result(dev->type->pm->prepare, error);
729                 if (error)
730                         goto End;
731         }
732
733         if (dev->class && dev->class->pm && dev->class->pm->prepare) {
734                 pm_dev_dbg(dev, state, "preparing class ");
735                 error = dev->class->pm->prepare(dev);
736                 suspend_report_result(dev->class->pm->prepare, error);
737         }
738  End:
739         up(&dev->sem);
740
741         return error;
742 }
743
744 /**
745  *      dpm_prepare - Prepare all devices for a PM transition.
746  *      @state: PM transition of the system being carried out.
747  *
748  *      Execute the ->prepare() callback for all devices.
749  */
750 static int dpm_prepare(pm_message_t state)
751 {
752         struct list_head list;
753         int error = 0;
754
755         INIT_LIST_HEAD(&list);
756         mutex_lock(&dpm_list_mtx);
757         transition_started = true;
758         while (!list_empty(&dpm_list)) {
759                 struct device *dev = to_device(dpm_list.next);
760
761                 get_device(dev);
762                 dev->power.status = DPM_PREPARING;
763                 mutex_unlock(&dpm_list_mtx);
764
765                 error = device_prepare(dev, state);
766
767                 mutex_lock(&dpm_list_mtx);
768                 if (error) {
769                         dev->power.status = DPM_ON;
770                         if (error == -EAGAIN) {
771                                 put_device(dev);
772                                 continue;
773                         }
774                         printk(KERN_ERR "PM: Failed to prepare device %s "
775                                 "for power transition: error %d\n",
776                                 kobject_name(&dev->kobj), error);
777                         put_device(dev);
778                         break;
779                 }
780                 dev->power.status = DPM_SUSPENDING;
781                 if (!list_empty(&dev->power.entry))
782                         list_move_tail(&dev->power.entry, &list);
783                 put_device(dev);
784         }
785         list_splice(&list, &dpm_list);
786         mutex_unlock(&dpm_list_mtx);
787         return error;
788 }
789
790 /**
791  *      dpm_suspend_start - Save state and stop all devices in system.
792  *      @state: PM transition of the system being carried out.
793  *
794  *      Prepare and suspend all devices.
795  */
796 int dpm_suspend_start(pm_message_t state)
797 {
798         int error;
799
800         might_sleep();
801         error = dpm_prepare(state);
802         if (!error)
803                 error = dpm_suspend(state);
804         return error;
805 }
806 EXPORT_SYMBOL_GPL(dpm_suspend_start);
807
808 void __suspend_report_result(const char *function, void *fn, int ret)
809 {
810         if (ret)
811                 printk(KERN_ERR "%s(): %pF returns %d\n", function, fn, ret);
812 }
813 EXPORT_SYMBOL_GPL(__suspend_report_result);