xref: /openbmc/linux/drivers/base/power/main.c (revision 7dd65feb)
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/pm_runtime.h>
25 #include <linux/resume-trace.h>
26 #include <linux/interrupt.h>
27 #include <linux/sched.h>
28 
29 #include "../base.h"
30 #include "power.h"
31 
32 /*
33  * The entries in the dpm_list list are in a depth first order, simply
34  * because children are guaranteed to be discovered after parents, and
35  * are inserted at the back of the list on discovery.
36  *
37  * Since device_pm_add() may be called with a device semaphore held,
38  * we must never try to acquire a device semaphore while holding
39  * dpm_list_mutex.
40  */
41 
42 LIST_HEAD(dpm_list);
43 
44 static DEFINE_MUTEX(dpm_list_mtx);
45 
46 /*
47  * Set once the preparation of devices for a PM transition has started, reset
48  * before starting to resume devices.  Protected by dpm_list_mtx.
49  */
50 static bool transition_started;
51 
52 /**
53  * device_pm_init - Initialize the PM-related part of a device object.
54  * @dev: Device object being initialized.
55  */
56 void device_pm_init(struct device *dev)
57 {
58 	dev->power.status = DPM_ON;
59 	pm_runtime_init(dev);
60 }
61 
62 /**
63  * device_pm_lock - Lock the list of active devices used by the PM core.
64  */
65 void device_pm_lock(void)
66 {
67 	mutex_lock(&dpm_list_mtx);
68 }
69 
70 /**
71  * device_pm_unlock - Unlock the list of active devices used by the PM core.
72  */
73 void device_pm_unlock(void)
74 {
75 	mutex_unlock(&dpm_list_mtx);
76 }
77 
78 /**
79  * device_pm_add - Add a device to the PM core's list of active devices.
80  * @dev: Device to add to the list.
81  */
82 void device_pm_add(struct device *dev)
83 {
84 	pr_debug("PM: Adding info for %s:%s\n",
85 		 dev->bus ? dev->bus->name : "No Bus",
86 		 kobject_name(&dev->kobj));
87 	mutex_lock(&dpm_list_mtx);
88 	if (dev->parent) {
89 		if (dev->parent->power.status >= DPM_SUSPENDING)
90 			dev_warn(dev, "parent %s should not be sleeping\n",
91 				 dev_name(dev->parent));
92 	} else if (transition_started) {
93 		/*
94 		 * We refuse to register parentless devices while a PM
95 		 * transition is in progress in order to avoid leaving them
96 		 * unhandled down the road
97 		 */
98 		dev_WARN(dev, "Parentless device registered during a PM transaction\n");
99 	}
100 
101 	list_add_tail(&dev->power.entry, &dpm_list);
102 	mutex_unlock(&dpm_list_mtx);
103 }
104 
105 /**
106  * device_pm_remove - Remove a device from the PM core's list of active devices.
107  * @dev: Device to be removed from the list.
108  */
109 void device_pm_remove(struct device *dev)
110 {
111 	pr_debug("PM: Removing info for %s:%s\n",
112 		 dev->bus ? dev->bus->name : "No Bus",
113 		 kobject_name(&dev->kobj));
114 	mutex_lock(&dpm_list_mtx);
115 	list_del_init(&dev->power.entry);
116 	mutex_unlock(&dpm_list_mtx);
117 	pm_runtime_remove(dev);
118 }
119 
120 /**
121  * device_pm_move_before - Move device in the PM core's list of active devices.
122  * @deva: Device to move in dpm_list.
123  * @devb: Device @deva should come before.
124  */
125 void device_pm_move_before(struct device *deva, struct device *devb)
126 {
127 	pr_debug("PM: Moving %s:%s before %s:%s\n",
128 		 deva->bus ? deva->bus->name : "No Bus",
129 		 kobject_name(&deva->kobj),
130 		 devb->bus ? devb->bus->name : "No Bus",
131 		 kobject_name(&devb->kobj));
132 	/* Delete deva from dpm_list and reinsert before devb. */
133 	list_move_tail(&deva->power.entry, &devb->power.entry);
134 }
135 
136 /**
137  * device_pm_move_after - Move device in the PM core's list of active devices.
138  * @deva: Device to move in dpm_list.
139  * @devb: Device @deva should come after.
140  */
141 void device_pm_move_after(struct device *deva, struct device *devb)
142 {
143 	pr_debug("PM: Moving %s:%s after %s:%s\n",
144 		 deva->bus ? deva->bus->name : "No Bus",
145 		 kobject_name(&deva->kobj),
146 		 devb->bus ? devb->bus->name : "No Bus",
147 		 kobject_name(&devb->kobj));
148 	/* Delete deva from dpm_list and reinsert after devb. */
149 	list_move(&deva->power.entry, &devb->power.entry);
150 }
151 
152 /**
153  * device_pm_move_last - Move device to end of the PM core's list of devices.
154  * @dev: Device to move in dpm_list.
155  */
156 void device_pm_move_last(struct device *dev)
157 {
158 	pr_debug("PM: Moving %s:%s to end of list\n",
159 		 dev->bus ? dev->bus->name : "No Bus",
160 		 kobject_name(&dev->kobj));
161 	list_move_tail(&dev->power.entry, &dpm_list);
162 }
163 
164 static ktime_t initcall_debug_start(struct device *dev)
165 {
166 	ktime_t calltime = ktime_set(0, 0);
167 
168 	if (initcall_debug) {
169 		pr_info("calling  %s+ @ %i\n",
170 				dev_name(dev), task_pid_nr(current));
171 		calltime = ktime_get();
172 	}
173 
174 	return calltime;
175 }
176 
177 static void initcall_debug_report(struct device *dev, ktime_t calltime,
178 				  int error)
179 {
180 	ktime_t delta, rettime;
181 
182 	if (initcall_debug) {
183 		rettime = ktime_get();
184 		delta = ktime_sub(rettime, calltime);
185 		pr_info("call %s+ returned %d after %Ld usecs\n", dev_name(dev),
186 			error, (unsigned long long)ktime_to_ns(delta) >> 10);
187 	}
188 }
189 
190 /**
191  * pm_op - Execute the PM operation appropriate for given PM event.
192  * @dev: Device to handle.
193  * @ops: PM operations to choose from.
194  * @state: PM transition of the system being carried out.
195  */
196 static int pm_op(struct device *dev,
197 		 const struct dev_pm_ops *ops,
198 		 pm_message_t state)
199 {
200 	int error = 0;
201 	ktime_t calltime;
202 
203 	calltime = initcall_debug_start(dev);
204 
205 	switch (state.event) {
206 #ifdef CONFIG_SUSPEND
207 	case PM_EVENT_SUSPEND:
208 		if (ops->suspend) {
209 			error = ops->suspend(dev);
210 			suspend_report_result(ops->suspend, error);
211 		}
212 		break;
213 	case PM_EVENT_RESUME:
214 		if (ops->resume) {
215 			error = ops->resume(dev);
216 			suspend_report_result(ops->resume, error);
217 		}
218 		break;
219 #endif /* CONFIG_SUSPEND */
220 #ifdef CONFIG_HIBERNATION
221 	case PM_EVENT_FREEZE:
222 	case PM_EVENT_QUIESCE:
223 		if (ops->freeze) {
224 			error = ops->freeze(dev);
225 			suspend_report_result(ops->freeze, error);
226 		}
227 		break;
228 	case PM_EVENT_HIBERNATE:
229 		if (ops->poweroff) {
230 			error = ops->poweroff(dev);
231 			suspend_report_result(ops->poweroff, error);
232 		}
233 		break;
234 	case PM_EVENT_THAW:
235 	case PM_EVENT_RECOVER:
236 		if (ops->thaw) {
237 			error = ops->thaw(dev);
238 			suspend_report_result(ops->thaw, error);
239 		}
240 		break;
241 	case PM_EVENT_RESTORE:
242 		if (ops->restore) {
243 			error = ops->restore(dev);
244 			suspend_report_result(ops->restore, error);
245 		}
246 		break;
247 #endif /* CONFIG_HIBERNATION */
248 	default:
249 		error = -EINVAL;
250 	}
251 
252 	initcall_debug_report(dev, calltime, error);
253 
254 	return error;
255 }
256 
257 /**
258  * pm_noirq_op - Execute the PM operation appropriate for given PM event.
259  * @dev: Device to handle.
260  * @ops: PM operations to choose from.
261  * @state: PM transition of the system being carried out.
262  *
263  * The driver of @dev will not receive interrupts while this function is being
264  * executed.
265  */
266 static int pm_noirq_op(struct device *dev,
267 			const struct dev_pm_ops *ops,
268 			pm_message_t state)
269 {
270 	int error = 0;
271 	ktime_t calltime, delta, rettime;
272 
273 	if (initcall_debug) {
274 		pr_info("calling  %s_i+ @ %i\n",
275 				dev_name(dev), task_pid_nr(current));
276 		calltime = ktime_get();
277 	}
278 
279 	switch (state.event) {
280 #ifdef CONFIG_SUSPEND
281 	case PM_EVENT_SUSPEND:
282 		if (ops->suspend_noirq) {
283 			error = ops->suspend_noirq(dev);
284 			suspend_report_result(ops->suspend_noirq, error);
285 		}
286 		break;
287 	case PM_EVENT_RESUME:
288 		if (ops->resume_noirq) {
289 			error = ops->resume_noirq(dev);
290 			suspend_report_result(ops->resume_noirq, error);
291 		}
292 		break;
293 #endif /* CONFIG_SUSPEND */
294 #ifdef CONFIG_HIBERNATION
295 	case PM_EVENT_FREEZE:
296 	case PM_EVENT_QUIESCE:
297 		if (ops->freeze_noirq) {
298 			error = ops->freeze_noirq(dev);
299 			suspend_report_result(ops->freeze_noirq, error);
300 		}
301 		break;
302 	case PM_EVENT_HIBERNATE:
303 		if (ops->poweroff_noirq) {
304 			error = ops->poweroff_noirq(dev);
305 			suspend_report_result(ops->poweroff_noirq, error);
306 		}
307 		break;
308 	case PM_EVENT_THAW:
309 	case PM_EVENT_RECOVER:
310 		if (ops->thaw_noirq) {
311 			error = ops->thaw_noirq(dev);
312 			suspend_report_result(ops->thaw_noirq, error);
313 		}
314 		break;
315 	case PM_EVENT_RESTORE:
316 		if (ops->restore_noirq) {
317 			error = ops->restore_noirq(dev);
318 			suspend_report_result(ops->restore_noirq, error);
319 		}
320 		break;
321 #endif /* CONFIG_HIBERNATION */
322 	default:
323 		error = -EINVAL;
324 	}
325 
326 	if (initcall_debug) {
327 		rettime = ktime_get();
328 		delta = ktime_sub(rettime, calltime);
329 		printk("initcall %s_i+ returned %d after %Ld usecs\n",
330 			dev_name(dev), error,
331 			(unsigned long long)ktime_to_ns(delta) >> 10);
332 	}
333 
334 	return error;
335 }
336 
337 static char *pm_verb(int event)
338 {
339 	switch (event) {
340 	case PM_EVENT_SUSPEND:
341 		return "suspend";
342 	case PM_EVENT_RESUME:
343 		return "resume";
344 	case PM_EVENT_FREEZE:
345 		return "freeze";
346 	case PM_EVENT_QUIESCE:
347 		return "quiesce";
348 	case PM_EVENT_HIBERNATE:
349 		return "hibernate";
350 	case PM_EVENT_THAW:
351 		return "thaw";
352 	case PM_EVENT_RESTORE:
353 		return "restore";
354 	case PM_EVENT_RECOVER:
355 		return "recover";
356 	default:
357 		return "(unknown PM event)";
358 	}
359 }
360 
361 static void pm_dev_dbg(struct device *dev, pm_message_t state, char *info)
362 {
363 	dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event),
364 		((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
365 		", may wakeup" : "");
366 }
367 
368 static void pm_dev_err(struct device *dev, pm_message_t state, char *info,
369 			int error)
370 {
371 	printk(KERN_ERR "PM: Device %s failed to %s%s: error %d\n",
372 		kobject_name(&dev->kobj), pm_verb(state.event), info, error);
373 }
374 
375 static void dpm_show_time(ktime_t starttime, pm_message_t state, char *info)
376 {
377 	ktime_t calltime;
378 	s64 usecs64;
379 	int usecs;
380 
381 	calltime = ktime_get();
382 	usecs64 = ktime_to_ns(ktime_sub(calltime, starttime));
383 	do_div(usecs64, NSEC_PER_USEC);
384 	usecs = usecs64;
385 	if (usecs == 0)
386 		usecs = 1;
387 	pr_info("PM: %s%s%s of devices complete after %ld.%03ld msecs\n",
388 		info ?: "", info ? " " : "", pm_verb(state.event),
389 		usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC);
390 }
391 
392 /*------------------------- Resume routines -------------------------*/
393 
394 /**
395  * device_resume_noirq - Execute an "early resume" callback for given device.
396  * @dev: Device to handle.
397  * @state: PM transition of the system being carried out.
398  *
399  * The driver of @dev will not receive interrupts while this function is being
400  * executed.
401  */
402 static int device_resume_noirq(struct device *dev, pm_message_t state)
403 {
404 	int error = 0;
405 
406 	TRACE_DEVICE(dev);
407 	TRACE_RESUME(0);
408 
409 	if (dev->bus && dev->bus->pm) {
410 		pm_dev_dbg(dev, state, "EARLY ");
411 		error = pm_noirq_op(dev, dev->bus->pm, state);
412 	}
413 
414 	TRACE_RESUME(error);
415 	return error;
416 }
417 
418 /**
419  * dpm_resume_noirq - Execute "early resume" callbacks for non-sysdev devices.
420  * @state: PM transition of the system being carried out.
421  *
422  * Call the "noirq" resume handlers for all devices marked as DPM_OFF_IRQ and
423  * enable device drivers to receive interrupts.
424  */
425 void dpm_resume_noirq(pm_message_t state)
426 {
427 	struct device *dev;
428 	ktime_t starttime = ktime_get();
429 
430 	mutex_lock(&dpm_list_mtx);
431 	transition_started = false;
432 	list_for_each_entry(dev, &dpm_list, power.entry)
433 		if (dev->power.status > DPM_OFF) {
434 			int error;
435 
436 			dev->power.status = DPM_OFF;
437 			error = device_resume_noirq(dev, state);
438 			if (error)
439 				pm_dev_err(dev, state, " early", error);
440 		}
441 	mutex_unlock(&dpm_list_mtx);
442 	dpm_show_time(starttime, state, "early");
443 	resume_device_irqs();
444 }
445 EXPORT_SYMBOL_GPL(dpm_resume_noirq);
446 
447 /**
448  * legacy_resume - Execute a legacy (bus or class) resume callback for device.
449  * dev: Device to resume.
450  * cb: Resume callback to execute.
451  */
452 static int legacy_resume(struct device *dev, int (*cb)(struct device *dev))
453 {
454 	int error;
455 	ktime_t calltime;
456 
457 	calltime = initcall_debug_start(dev);
458 
459 	error = cb(dev);
460 	suspend_report_result(cb, error);
461 
462 	initcall_debug_report(dev, calltime, error);
463 
464 	return error;
465 }
466 
467 /**
468  * device_resume - Execute "resume" callbacks for given device.
469  * @dev: Device to handle.
470  * @state: PM transition of the system being carried out.
471  */
472 static int device_resume(struct device *dev, pm_message_t state)
473 {
474 	int error = 0;
475 
476 	TRACE_DEVICE(dev);
477 	TRACE_RESUME(0);
478 
479 	down(&dev->sem);
480 
481 	if (dev->bus) {
482 		if (dev->bus->pm) {
483 			pm_dev_dbg(dev, state, "");
484 			error = pm_op(dev, dev->bus->pm, state);
485 		} else if (dev->bus->resume) {
486 			pm_dev_dbg(dev, state, "legacy ");
487 			error = legacy_resume(dev, dev->bus->resume);
488 		}
489 		if (error)
490 			goto End;
491 	}
492 
493 	if (dev->type) {
494 		if (dev->type->pm) {
495 			pm_dev_dbg(dev, state, "type ");
496 			error = pm_op(dev, dev->type->pm, state);
497 		}
498 		if (error)
499 			goto End;
500 	}
501 
502 	if (dev->class) {
503 		if (dev->class->pm) {
504 			pm_dev_dbg(dev, state, "class ");
505 			error = pm_op(dev, dev->class->pm, state);
506 		} else if (dev->class->resume) {
507 			pm_dev_dbg(dev, state, "legacy class ");
508 			error = legacy_resume(dev, dev->class->resume);
509 		}
510 	}
511  End:
512 	up(&dev->sem);
513 
514 	TRACE_RESUME(error);
515 	return error;
516 }
517 
518 /**
519  * dpm_resume - Execute "resume" callbacks for non-sysdev devices.
520  * @state: PM transition of the system being carried out.
521  *
522  * Execute the appropriate "resume" callback for all devices whose status
523  * indicates that they are suspended.
524  */
525 static void dpm_resume(pm_message_t state)
526 {
527 	struct list_head list;
528 	ktime_t starttime = ktime_get();
529 
530 	INIT_LIST_HEAD(&list);
531 	mutex_lock(&dpm_list_mtx);
532 	while (!list_empty(&dpm_list)) {
533 		struct device *dev = to_device(dpm_list.next);
534 
535 		get_device(dev);
536 		if (dev->power.status >= DPM_OFF) {
537 			int error;
538 
539 			dev->power.status = DPM_RESUMING;
540 			mutex_unlock(&dpm_list_mtx);
541 
542 			error = device_resume(dev, state);
543 
544 			mutex_lock(&dpm_list_mtx);
545 			if (error)
546 				pm_dev_err(dev, state, "", error);
547 		} else if (dev->power.status == DPM_SUSPENDING) {
548 			/* Allow new children of the device to be registered */
549 			dev->power.status = DPM_RESUMING;
550 		}
551 		if (!list_empty(&dev->power.entry))
552 			list_move_tail(&dev->power.entry, &list);
553 		put_device(dev);
554 	}
555 	list_splice(&list, &dpm_list);
556 	mutex_unlock(&dpm_list_mtx);
557 	dpm_show_time(starttime, state, NULL);
558 }
559 
560 /**
561  * device_complete - Complete a PM transition for given device.
562  * @dev: Device to handle.
563  * @state: PM transition of the system being carried out.
564  */
565 static void device_complete(struct device *dev, pm_message_t state)
566 {
567 	down(&dev->sem);
568 
569 	if (dev->class && dev->class->pm && dev->class->pm->complete) {
570 		pm_dev_dbg(dev, state, "completing class ");
571 		dev->class->pm->complete(dev);
572 	}
573 
574 	if (dev->type && dev->type->pm && dev->type->pm->complete) {
575 		pm_dev_dbg(dev, state, "completing type ");
576 		dev->type->pm->complete(dev);
577 	}
578 
579 	if (dev->bus && dev->bus->pm && dev->bus->pm->complete) {
580 		pm_dev_dbg(dev, state, "completing ");
581 		dev->bus->pm->complete(dev);
582 	}
583 
584 	up(&dev->sem);
585 }
586 
587 /**
588  * dpm_complete - Complete a PM transition for all non-sysdev devices.
589  * @state: PM transition of the system being carried out.
590  *
591  * Execute the ->complete() callbacks for all devices whose PM status is not
592  * DPM_ON (this allows new devices to be registered).
593  */
594 static void dpm_complete(pm_message_t state)
595 {
596 	struct list_head list;
597 
598 	INIT_LIST_HEAD(&list);
599 	mutex_lock(&dpm_list_mtx);
600 	transition_started = false;
601 	while (!list_empty(&dpm_list)) {
602 		struct device *dev = to_device(dpm_list.prev);
603 
604 		get_device(dev);
605 		if (dev->power.status > DPM_ON) {
606 			dev->power.status = DPM_ON;
607 			mutex_unlock(&dpm_list_mtx);
608 
609 			device_complete(dev, state);
610 			pm_runtime_put_sync(dev);
611 
612 			mutex_lock(&dpm_list_mtx);
613 		}
614 		if (!list_empty(&dev->power.entry))
615 			list_move(&dev->power.entry, &list);
616 		put_device(dev);
617 	}
618 	list_splice(&list, &dpm_list);
619 	mutex_unlock(&dpm_list_mtx);
620 }
621 
622 /**
623  * dpm_resume_end - Execute "resume" callbacks and complete system transition.
624  * @state: PM transition of the system being carried out.
625  *
626  * Execute "resume" callbacks for all devices and complete the PM transition of
627  * the system.
628  */
629 void dpm_resume_end(pm_message_t state)
630 {
631 	might_sleep();
632 	dpm_resume(state);
633 	dpm_complete(state);
634 }
635 EXPORT_SYMBOL_GPL(dpm_resume_end);
636 
637 
638 /*------------------------- Suspend routines -------------------------*/
639 
640 /**
641  * resume_event - Return a "resume" message for given "suspend" sleep state.
642  * @sleep_state: PM message representing a sleep state.
643  *
644  * Return a PM message representing the resume event corresponding to given
645  * sleep state.
646  */
647 static pm_message_t resume_event(pm_message_t sleep_state)
648 {
649 	switch (sleep_state.event) {
650 	case PM_EVENT_SUSPEND:
651 		return PMSG_RESUME;
652 	case PM_EVENT_FREEZE:
653 	case PM_EVENT_QUIESCE:
654 		return PMSG_RECOVER;
655 	case PM_EVENT_HIBERNATE:
656 		return PMSG_RESTORE;
657 	}
658 	return PMSG_ON;
659 }
660 
661 /**
662  * device_suspend_noirq - Execute a "late suspend" callback for given device.
663  * @dev: Device to handle.
664  * @state: PM transition of the system being carried out.
665  *
666  * The driver of @dev will not receive interrupts while this function is being
667  * executed.
668  */
669 static int device_suspend_noirq(struct device *dev, pm_message_t state)
670 {
671 	int error = 0;
672 
673 	if (dev->bus && dev->bus->pm) {
674 		pm_dev_dbg(dev, state, "LATE ");
675 		error = pm_noirq_op(dev, dev->bus->pm, state);
676 	}
677 	return error;
678 }
679 
680 /**
681  * dpm_suspend_noirq - Execute "late suspend" callbacks for non-sysdev devices.
682  * @state: PM transition of the system being carried out.
683  *
684  * Prevent device drivers from receiving interrupts and call the "noirq" suspend
685  * handlers for all non-sysdev devices.
686  */
687 int dpm_suspend_noirq(pm_message_t state)
688 {
689 	struct device *dev;
690 	ktime_t starttime = ktime_get();
691 	int error = 0;
692 
693 	suspend_device_irqs();
694 	mutex_lock(&dpm_list_mtx);
695 	list_for_each_entry_reverse(dev, &dpm_list, power.entry) {
696 		error = device_suspend_noirq(dev, state);
697 		if (error) {
698 			pm_dev_err(dev, state, " late", error);
699 			break;
700 		}
701 		dev->power.status = DPM_OFF_IRQ;
702 	}
703 	mutex_unlock(&dpm_list_mtx);
704 	if (error)
705 		dpm_resume_noirq(resume_event(state));
706 	else
707 		dpm_show_time(starttime, state, "late");
708 	return error;
709 }
710 EXPORT_SYMBOL_GPL(dpm_suspend_noirq);
711 
712 /**
713  * legacy_suspend - Execute a legacy (bus or class) suspend callback for device.
714  * dev: Device to suspend.
715  * cb: Suspend callback to execute.
716  */
717 static int legacy_suspend(struct device *dev, pm_message_t state,
718 			  int (*cb)(struct device *dev, pm_message_t state))
719 {
720 	int error;
721 	ktime_t calltime;
722 
723 	calltime = initcall_debug_start(dev);
724 
725 	error = cb(dev, state);
726 	suspend_report_result(cb, error);
727 
728 	initcall_debug_report(dev, calltime, error);
729 
730 	return error;
731 }
732 
733 /**
734  * device_suspend - Execute "suspend" callbacks for given device.
735  * @dev: Device to handle.
736  * @state: PM transition of the system being carried out.
737  */
738 static int device_suspend(struct device *dev, pm_message_t state)
739 {
740 	int error = 0;
741 
742 	down(&dev->sem);
743 
744 	if (dev->class) {
745 		if (dev->class->pm) {
746 			pm_dev_dbg(dev, state, "class ");
747 			error = pm_op(dev, dev->class->pm, state);
748 		} else if (dev->class->suspend) {
749 			pm_dev_dbg(dev, state, "legacy class ");
750 			error = legacy_suspend(dev, state, dev->class->suspend);
751 		}
752 		if (error)
753 			goto End;
754 	}
755 
756 	if (dev->type) {
757 		if (dev->type->pm) {
758 			pm_dev_dbg(dev, state, "type ");
759 			error = pm_op(dev, dev->type->pm, state);
760 		}
761 		if (error)
762 			goto End;
763 	}
764 
765 	if (dev->bus) {
766 		if (dev->bus->pm) {
767 			pm_dev_dbg(dev, state, "");
768 			error = pm_op(dev, dev->bus->pm, state);
769 		} else if (dev->bus->suspend) {
770 			pm_dev_dbg(dev, state, "legacy ");
771 			error = legacy_suspend(dev, state, dev->bus->suspend);
772 		}
773 	}
774  End:
775 	up(&dev->sem);
776 
777 	return error;
778 }
779 
780 /**
781  * dpm_suspend - Execute "suspend" callbacks for all non-sysdev devices.
782  * @state: PM transition of the system being carried out.
783  */
784 static int dpm_suspend(pm_message_t state)
785 {
786 	struct list_head list;
787 	ktime_t starttime = ktime_get();
788 	int error = 0;
789 
790 	INIT_LIST_HEAD(&list);
791 	mutex_lock(&dpm_list_mtx);
792 	while (!list_empty(&dpm_list)) {
793 		struct device *dev = to_device(dpm_list.prev);
794 
795 		get_device(dev);
796 		mutex_unlock(&dpm_list_mtx);
797 
798 		error = device_suspend(dev, state);
799 
800 		mutex_lock(&dpm_list_mtx);
801 		if (error) {
802 			pm_dev_err(dev, state, "", error);
803 			put_device(dev);
804 			break;
805 		}
806 		dev->power.status = DPM_OFF;
807 		if (!list_empty(&dev->power.entry))
808 			list_move(&dev->power.entry, &list);
809 		put_device(dev);
810 	}
811 	list_splice(&list, dpm_list.prev);
812 	mutex_unlock(&dpm_list_mtx);
813 	if (!error)
814 		dpm_show_time(starttime, state, NULL);
815 	return error;
816 }
817 
818 /**
819  * device_prepare - Prepare a device for system power transition.
820  * @dev: Device to handle.
821  * @state: PM transition of the system being carried out.
822  *
823  * Execute the ->prepare() callback(s) for given device.  No new children of the
824  * device may be registered after this function has returned.
825  */
826 static int device_prepare(struct device *dev, pm_message_t state)
827 {
828 	int error = 0;
829 
830 	down(&dev->sem);
831 
832 	if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) {
833 		pm_dev_dbg(dev, state, "preparing ");
834 		error = dev->bus->pm->prepare(dev);
835 		suspend_report_result(dev->bus->pm->prepare, error);
836 		if (error)
837 			goto End;
838 	}
839 
840 	if (dev->type && dev->type->pm && dev->type->pm->prepare) {
841 		pm_dev_dbg(dev, state, "preparing type ");
842 		error = dev->type->pm->prepare(dev);
843 		suspend_report_result(dev->type->pm->prepare, error);
844 		if (error)
845 			goto End;
846 	}
847 
848 	if (dev->class && dev->class->pm && dev->class->pm->prepare) {
849 		pm_dev_dbg(dev, state, "preparing class ");
850 		error = dev->class->pm->prepare(dev);
851 		suspend_report_result(dev->class->pm->prepare, error);
852 	}
853  End:
854 	up(&dev->sem);
855 
856 	return error;
857 }
858 
859 /**
860  * dpm_prepare - Prepare all non-sysdev devices for a system PM transition.
861  * @state: PM transition of the system being carried out.
862  *
863  * Execute the ->prepare() callback(s) for all devices.
864  */
865 static int dpm_prepare(pm_message_t state)
866 {
867 	struct list_head list;
868 	int error = 0;
869 
870 	INIT_LIST_HEAD(&list);
871 	mutex_lock(&dpm_list_mtx);
872 	transition_started = true;
873 	while (!list_empty(&dpm_list)) {
874 		struct device *dev = to_device(dpm_list.next);
875 
876 		get_device(dev);
877 		dev->power.status = DPM_PREPARING;
878 		mutex_unlock(&dpm_list_mtx);
879 
880 		pm_runtime_get_noresume(dev);
881 		if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) {
882 			/* Wake-up requested during system sleep transition. */
883 			pm_runtime_put_sync(dev);
884 			error = -EBUSY;
885 		} else {
886 			error = device_prepare(dev, state);
887 		}
888 
889 		mutex_lock(&dpm_list_mtx);
890 		if (error) {
891 			dev->power.status = DPM_ON;
892 			if (error == -EAGAIN) {
893 				put_device(dev);
894 				error = 0;
895 				continue;
896 			}
897 			printk(KERN_ERR "PM: Failed to prepare device %s "
898 				"for power transition: error %d\n",
899 				kobject_name(&dev->kobj), error);
900 			put_device(dev);
901 			break;
902 		}
903 		dev->power.status = DPM_SUSPENDING;
904 		if (!list_empty(&dev->power.entry))
905 			list_move_tail(&dev->power.entry, &list);
906 		put_device(dev);
907 	}
908 	list_splice(&list, &dpm_list);
909 	mutex_unlock(&dpm_list_mtx);
910 	return error;
911 }
912 
913 /**
914  * dpm_suspend_start - Prepare devices for PM transition and suspend them.
915  * @state: PM transition of the system being carried out.
916  *
917  * Prepare all non-sysdev devices for system PM transition and execute "suspend"
918  * callbacks for them.
919  */
920 int dpm_suspend_start(pm_message_t state)
921 {
922 	int error;
923 
924 	might_sleep();
925 	error = dpm_prepare(state);
926 	if (!error)
927 		error = dpm_suspend(state);
928 	return error;
929 }
930 EXPORT_SYMBOL_GPL(dpm_suspend_start);
931 
932 void __suspend_report_result(const char *function, void *fn, int ret)
933 {
934 	if (ret)
935 		printk(KERN_ERR "%s(): %pF returns %d\n", function, fn, ret);
936 }
937 EXPORT_SYMBOL_GPL(__suspend_report_result);
938